python+selenium+pytest 自动化测试框架pytest的应用

在(一)中,简单对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有应有的环境

python+selenium+pytest 自动化测试框架pytest的应用_第1张图片

(三)建立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的简单测试

python+selenium+pytest 自动化测试框架pytest的应用_第2张图片

 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()

python+selenium+pytest 自动化测试框架pytest的应用_第3张图片

 

还有一些比较常用的pytest参数比如-k模糊查询类名、函数名、模块名运行指定用例
比如pytest -k ‘Test1’ 执行类Test1

给某些方法或类加上标签
比如给测试用例1与测试用例2加上标签,引用装饰器 @pytest.mark.webtest
执行pytest -v -m webtest只执行标签的用例
python+selenium+pytest 自动化测试框架pytest的应用_第4张图片

 

(四)生成目录下所有测试文件的测试报告

将上述的test_mod.py文件放在新建test目录中,执行

pytest test --html=report.html --self-contained-html

在test目录中生成report.html测试报告,打开该html文件可以看到如下

python+selenium+pytest 自动化测试框架pytest的应用_第5张图片

 (五)初始化清除
初始化与清除的执行顺序层级结构如下

————目录初始化

	————模块初始化
	
			————类初始化
			
					————方法初始化
				
					————方法清除
		
			————类清除
			
	————模块清除

————目录清除		

示例代码如下(初始化与清除函数名携带关键词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

python+selenium+pytest 自动化测试框架pytest的应用_第6张图片

你可能感兴趣的:(python,selenium,pytest)