自动化框架介绍及使用

自动化框架介绍及使用

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文件

原文地址:https://www.cnblogs.com/dingxiansheng/p/14704079.html