在(一)中,简单对selenium常用问题方法进行介绍,在二中详细介绍结合框架的使用
(一)pytest的介绍
基于python的框架常用的又unittest、pytest、rebotframework
unittest、pytest侧重于单元测试
rebotframework侧重于系统测试
pytest 可以用来做 系统测试 的自动化, 它的特点有
(1)用 Python 编写测试用例,简便易用
(2)可以用 文件系统目录层次 对应 手工测试用例 层次结构
(3)灵活的初始化清除 机制
(4)可以灵活挑选测试用例执行
(5)利用第三方插件,可以生成不错的报表
(二)安装
pytest安装
pip install pytest
测试报表安装
pip install pytest-html
安装成功界面,输入pytest有应有的环境
(三)建立pytest基本用例
官方文档 给出了 pytest 寻找 测试项 的 具体规则:
(1)如果未指定命令行参数,则从 testpath(如果已配置)或当前目录开始收集。
如果命令行参数, 指定了 目录、文件名 或 node id 的任何组合,则按参数来找
(2)寻找过程会递归到目录中,除非它们匹配上 norecursedirs。
(3)在这些目录中,搜索由其测试包名称导入的 test_*.py 或 *_test.py 文件。
(4)从这些文件中,收集如下测试项:
test为前缀 的 函数
Test为前缀的 类 里面的 test为前缀的方法
所以建立测试文件test_mod.py,我们把测试用例存放在类中,类名必须以 Test 为前缀的类 ,用例对应的方法必须以 test 为前缀的方法,否则pytest识别不到,输入如下代码:
import pytest
class Test1:
def test_01(self):print('\n用例C001001')
assert 1 == 1
def test_C001002(self):print('\n用例C001002')
assert 2 == 2
def test_C001003(self):print('\n用例C001003')
assert 3 == 2
在terminal中进行一个pytest的简单测试
pytest中用例检查直接用python的assert断言,上述表明两个通过,一个不通过,并标明详细的位置
如果需要更加详细的信息,则测试类、测试函数加上-v;需要打印的信息则加上-s
所以可以
#指定目录运行
pytest test 或者多个目录 pytest test test1\test11
#指定模块执行
pytest test\test_mod.py
#指定类运行
pytest test\test_mod.py\Test1
#指定方法运行
pytest test\test_mod.py\Test1::test_01
运行这个模块pytest -sv test_mod.py()
还有一些比较常用的pytest参数比如-k模糊查询类名、函数名、模块名运行指定用例
比如pytest -k ‘Test1’ 执行类Test1
给某些方法或类加上标签
比如给测试用例1与测试用例2加上标签,引用装饰器 @pytest.mark.webtest
执行pytest -v -m webtest只执行标签的用例
(四)生成目录下所有测试文件的测试报告
将上述的test_mod.py文件放在新建test目录中,执行
pytest test --html=report.html --self-contained-html
在test目录中生成report.html测试报告,打开该html文件可以看到如下
(五)初始化清除
初始化与清除的执行顺序层级结构如下
————目录初始化
————模块初始化
————类初始化
————方法初始化
————方法清除
————类清除
————模块清除
————目录清除
示例代码如下(初始化与清除函数名携带关键词setup,teardown):
def setup(self):print("模块初始化")
def teardown(self):print("模块完全清除")
class Test2:
# 类初始化,这里调用的是classmethod
@classmethod
def setup_class(cls):print("\n 初始化类")
#类清除
@classmethod
# 所有用例执行结束时执行
def teardown_class(cls):print("\n 类清除成功")
#方法初始化
def setup_method(self):print("\n 方法初始化 ")
#方法清除
def teardown_method(self):print('\n 方法清除')
def test_01(self):print('\n用例C001001')
assert 1 == 1
def test_C001002(self):print('\n用例C001002')
assert 2 == 2
def test_C001003(self):print('\n用例C001003')
assert 3 == 2
再新建一个目录初始化清除,在test文件下面新建conftest.py文件,文件名要固定conftest.py
import pytest
@pytest.fixture(scope=‘package’,autouse=True)
def st_emptyEnv():
print('初始化目录')
yield
print('清除目录')
层级结构如下,执行pytest test -sv
简单的介绍了pytest框架的基本使用,在python+selenium+pytest(下)中进行一次工作中的项目实战自动化测试
版权归原作者 虎起来 所有, 如有侵权,请联系我们删除。