一、web自动化内容
UI - user interface
web网页、客户端(PC,app)
1、pytest
2、selenium
selenium介绍、元素定位、元素操作
python+selenium:
框架:
PageObject模式
优化和封装 - selenium二次封装、失败截图、执行过程输出、异常信息输出
selenium原理
appium
###################################这是分隔线###################################
二、pytest初识
unittest
写用例 TestCase
收集用例 TestLoader.discover()
生成报告 HtmlTestRunner
模板化的东西
pytest
能够运行unittest用例
灵活
共同点
测试框架:
均通过python来编写测试用例、收集用例、运行用例、生成报告
不同点
一、编写用例
1、编写用例
unittest:继承TestCase
pytest:函数/类里面的方法 -- 用例名称必须以test_开头。如果用例在类中,类名必须以Test开头
2、前置后置
unittest:setup/teardown setupClass/teardownClass
pytest:
方案一:
沿用unittest的风格
1、用例级别:setup/teardown -- 类里面的用例和类外的用例都可以
2、类级别:setup_class/teardown_class -- 类用
3、模块级别:setup_module/teardown_module --模块用
方案二:
fixture
3、断言
unittest:self.assertXXXXX()
pytest:assert 表达式
二、收集用例和运行用例
实际项目:用例分散在多个文件当中
unittest:TestLoader.discover(目录) - 收集到套件当中,run方法去执行
pytest:
不需要写代码去收集用例 - 自动收集/发现用例的方式
执行用例的时候会自动收集:
pytest命令行:pytest [参数]
(1)如何自动收集用例?
1、目录 - 从哪个目录下开始搜索用例
rootdir:pytest命令在哪个目录下运行,就以哪个目录为rootdir
2、文件名 - 符合test_*.py或者*——test.py条件的文件名,一定有用例
3、函数/类下的方法 - 函数名以test_开头
- 以Test开头(不含__init__)的类下的test_开头
(2)收集并运行用例:
方式一:
命令行:pytest -s -v 控制台显示详细的用例执行情况
方式二:
python文件:pytest.main()
执行顺序
1、文件名:ASCII
2、文件内部:按代码先后顺序
三、生成测试报告
unittest:HtmlTestRunner、BeautifulReport
pytest:有非常多的插件
(1)html-插件
html插件安装命令:pip install pytest-html
(2)allure插件
allure插件安装命令:pip install allure-pytest
allure命令行工具下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
allure serve
(3)重运行-插件
官方文档:https://docs.pytest.org/en/stable/
pytest+allure+jenkins集成:https://www.cnblogs.com/Simple-Small/p/11512337.html
pytest:https://www.cnblogs.com/Simple-Small/tag/pytest/
###################################这是分隔线###################################
三、fixtrue用法
一、前置后置
unittest:
setup/teardown
setup得到的变量,怎么传递给测试用例:self.XXX = value
setupClass/teardownClass
setupClass得到的变量,怎么传递给测试用例:self.XXX = value
pytest:
方案一:沿用unittest的风格
1、用例级别:setup/teardown -- 类里面的用例和类外的用例都可以
2、类级别:setup_class/teardown_class -- 类用
3、模块级别:setup_module/teardown_module --模块用
方案二:fixture-- 详解
二、fixture:先定义,再调用和共享
(1)定义:
1、函数实现,函数名称不固定 -- 如何知道是前置后置?
@pytest.fixture
def fix():
pass
2、前置操作和后置操作,写在一个函数里 -- 怎么区分哪些是前置代码?后置代码?
@pytest.fixture
def fix():
前置代码
yield #分隔线
后置代码
3、4个作用域:测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)
@pytest.fixture(scope=function(默认值)/class/module/session)
def fix():
前置代码
yield #分隔线
后置代码
4、不跟测试类/测试用例放在一起 -- 如果测试类需要使用,怎么办?需要的时候再调用
5、前置操作得到的一些数据,如何传递给测试用例?
yield 返回值
在测试用例中:以fixture函数名作为用例参数。用例参数接受返回值
测试函数的参数:1、fixture
2、参数化
6、共享机制:conftest.py -- 详解
conftest.py 定义fixture,可以定义多个
(2)调用:
用例/类 主动调用:哪儿需要哪儿调
调用方式:
@pytest.mark.usefixtures("fixture的函数名称")
测试类/测试函数
如果fixture有返回值:
那么函数名作为测试函数的参数时,则可以不用使用:@pytest.mark.usefixtures("函数名称")
(3)共享
conftest.py共享
1.所在目录下全面共享
2.支持嵌套