• 自动化框架介绍及使用


    自动化框架介绍及使用

    1         自动化背景

    A、 后续软件需求不存在大的变动

    B、 需要回归保证功能稳定

    C、 自动化测试脚本可重复使用

    2         自动化环境搭建
    2.1     安装python

    官网: https://www.python.org

    在 Windows 命令提示符下输入“ python”命令,可以进入 Python Shell 模式,及安装成功

     

    2.2     安装pycharm

    下载安装 https://www.jetbrains.com/pycharm/download/#section=windows 

    创建项目选择项目路径及解析器

     

    2.3     安装 Selenium及第三方库
    2.3.1 在线安装

    先进入路径:File - settings - Project - Project Interpreter,点击右侧+号,在弹出的对话框中输入:selenium,点击install package

     

     

    2.3.2 离线安装

    https://pypi.org/下载离线安装包(tar包、wel文件),在对应下载目录执行安装命令

    1、tar包

    进入对应目录执行:python setup.py install

    2、whl文件

    进入对应目录执行:pip install *.whl

    也可以从其他环境批量导入安装

    其他环境导出:

    pip freeze > requirements.txt

     

    pip download -d your_offline_packages -r requirements.txt

     

    本环境导入:

    将requirements文件及其offline_packages安装包放在对应项目路径中,执行命令

    pip install --no-index --find-links=your_offline_packages -r requirements.txt

    2.4     安装chromedriver驱动

    http://chromedriver.storage.googleapis.com/index.html

    将chromedriver.exe放置到python的安装目录下(也可放在Scripts目录)

     

     

    2.5     环境验证

    新建python文件,输入如下代码并执行,成功打开chrome浏览器则环境搭建成功

     

    3         自动化项目结构介绍

    自动化框架是基于python + selenium + unittest实现web页面的自动化测试

    3.1     AutoCase项目结构

    Case、business、page按照功能菜单目录一一对应

    目录如下:

     

    3.1.1 Page

    用于存放元素page层的封装:将该功能下所用到的页面元素,按菜单功能封装

    在page中用到的单独变量,放在对应的类中

     

    3.1.1.1  元素定位

    find_element_by_id()方法是通过 id 来定位元素的

    find_element_by_name()方法是通过 name 来定位元素的

    find_element_by_class_name()方法是通过 class 来定位元素的

    find_element_by_tag_name()方法是通过元素的标签名来定位元素的

    find_element_by_link_text()方法是通过元素标签对之间的文字信息来定位元素的

    find_element_by_xpath()方法是用 XPath 来定位元素的

    find_element_by_css_selector()方法通过CSS定位(CSS 定位速度比 XPath
    定位速度快)

    3.1.2 Business

    用于业务层的封装:将page层拼接形成业务层,按菜单功能封装

     

    3.1.3 Case

    用于用例层的封装:将business层拼接形成场景用例,按功能菜单封装

     

    1、  在用例层添加断言判断用例执行成功失败

    2、  所有用例以test*开头,unittest只会把以“ test”开头的方法当作测试用例

    3、  编写过程中添加@pytest.mark.run(order=1),便于后期通过pytest来规定用例执行的先后顺序

    4、  装饰器

    unittest.skip(reason):无条件地跳过装饰的测试,需要说明跳过测试的原因

    @unittest.skip("直接跳过测试")

    unittest.skipIf(condition, reason):如果条件为真,则跳过装饰的测试

    @unittest.skipIf(3 > 2, "当条件为真时跳过测试")


    unittest.skipUnless(condition, reason):当条件为真时,执行装饰的测试

    @unittest.skipUnless(3 > 2, "当条件为真时执行测试")

    unittest.expectedFailure():不管执行结果是否失败,都将测试标记为失败

    @unittest.expectedFailure()

    3.1.3.1  TestBase.py

    基础case类(case继承TestBase,TestBase继承unittest.TestCase),封装Fixture(初始化)内容:

    setUpModule/tearDownModule:在整个模块的开始与结束时被执行

    setUpClass/tearDownClass:在测试类的开始与结束时被执行,需要@classmethod进行装饰(不需要实例化就可以执行,方法的参数为 cls)

    setUp/tearDown:在测试用例的开始与结束时被执行

    3.1.3.2  断言

       

     

    3.1.4 Conf

    主要用于测试环境的相关配置文件

    3.1.4.1  ini文件

    ini配置文件由节、键、值组成,通过Util中的readConf.py读取配置

    节:[urlenv]

    键:[base_url]

    值:[http://…]

    3.1.4.2  BrowserEngine

    封装浏览器驱动,兼容多版本浏览器(ChromeFirefoxIE),注意selenium、浏览器、驱动之间的版本关系

     

    3.1.5 Datafile

    用于存放数据测试文件(变量验证,可以使用数据驱动测试)

     

     

    3.1.6 Report

    存放测试报告目录

     

    3.1.7 Screenshot

    存放失败用例截图,可以链接到测试报告里,这边截图方法get_screenshot_as_file(),封装在tearDown()中,self._outcome.errors为unittest中封装的打印用例执行的日志(用例成功 error的第二项是None,error打印出来是个字典)

     

     

    3.1.8 Util

    存放工具类方法(DB连接、文件及文件夹路径获取、日志、生成测试报告、读取conf.ini配置、截图)

     

    3.1.9 Run_case.py、suitecase.py脚本

    Run_case.py:unittest执行用例脚本

    Suitecase.py:用例执行顺序文件(严格按照文件内容执行),unittest默认是按照用例名称对应的ASCII码的顺序加载,数字与字母的顺序为:0-9,A-Z,a-z

    Unittest中自动扫描用例的方法discover(具体顺序也是按照ASCII码的顺序加载)

     

    4         如何使用

    1、  下载项目到本地(svn管理自动化代码,先更新后提交)

    https://blog.csdn.net/deng_sir/article/details/89882893

    2、  按菜单模块命名对应的caseusinesspage,并编写测试用例

    3、  调测用例,用例执行成功后维护再上传对应的caseusinesspage,suitcase.py文件

  • 相关阅读:
    【数据结构】10.java源码关于LinkedHashMap
    【数据结构】9.java源码关于HashTable
    【数据结构】8.java源码关于HashMap
    【数据结构】7.java源码关于LinkedList
    【LEETCODE】69、动态规划,easy,medium级别,题目:198、139、221
    【LEETCODE】68、动态规划,medium级别,题目:95、120、91
    【LEETCODE】67、分治递归,medium&hard级别,题目:215、312
    【数据结构】6.java源码ArrayList
    【LEETCODE】66、字符串分类,hard级别,题目:32,72,76
    mysql查询所有表数据大小
  • 原文地址:https://www.cnblogs.com/dingxiansheng/p/14704079.html
Copyright © 2020-2023  润新知