七叔教你用Pytest+Allure+Jenkins实现Web自动化集成测试

前言

今天我们来讲讲Pytest+Allure+Jenkins实现Web自动化集成测试,喜欢的小伙伴记得点赞哟。

七叔教你用Pytest+Allure+Jenkins实现Web自动化集成测试_第1张图片

 

Pytest介绍

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活、容易上手、文档丰富;支持参数化,可以细粒度地控制被测用例;能够支持简单的单元测试和复杂的功能测试,还可以用来做Web自动化(selenium)、APP自动化(appium)以及接口自动化(pytest+requests);pytest具有很多第三方插件,并且可以自动以扩展,比较好用的如pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败用例重复执行)、pytest-xdist(多CPU分发)等;测试用例的skip和xfail处理;可以很好的和CI工具结合,如:Jenkins。

Pytest安装

直接在命令窗口执行以下命令即可,更多信息可查阅官方文档

pip install pytest # 安装pytest
pytest --version   # 查看pytest版本

直接在PyCharm中安装,下面提到的使用pip安装方式都可以直接在PyCharm中安装,安装成功后点击【OK】

 

PyCharm中设置使用pytest

由于PyCharm默认使用Unitest,所以安装pytest后需要更改默认值,配置路径如下

配置路径:依次点击【File】→【Settings】→【Tools】→【Python Integrated Tools】,【Default test runner】选择“pytest”,然后点击【Apply】→【OK】,就可以使用Pytest啦

 

Pytest使用方法

Pytest规则

编写pytest测试用例默认使用以下规则,当然,规则是可以修改的

  • 测试文件以test_开头或者以_test结尾
  • 测试类以Test开头,且类中不能包含__init__方法
  • 测试函数/方法以test_开头
  • 断言使用基本的assert即可

修改规则需添加配置文件pytest.ini,它是pytest的主配置文件,可以修改pytest的默认行为,此文件放在项目的根目录下才会生效(除非指定目录查找配置文件),如下配置,注意:实际配置文件中不可出现中文、冒号、引号等

[pytest]
python_files = test_*.py *_test.py case_*	# 添加以case_*开头的测试模块
python_classes = Test* *_case* 				# 添加以*_case结尾的测试类
python_functions = test_* case_* 			# 添加以case_*开头的测试函数
testpaths = testcases	# 指定测试目录,是指以testpaths所在目录为基准的相对路径
addopts = -vs -l		# 将常用命令参数设为默认,省去重复输入的工作
norecursedirs = .* build dist CVS _darcs {arch} *.egg src # 指定pytest忽略查找某些目录,多个目录之间空格隔开
log_cli = True			# 控制台实时输出日志

# 注册mark标记
markers =
	smoke : smoke tests as smoke
    output : print

Pytest标记

上面的配置文件中提到了标记,又如何使用呢?

默认情况下,pytest会递归查找当前目录下所有以test开头或结尾的Python脚本,并执行文件内所有以test开头的函数和方法。工作中由于功能尚未实现、挑选用例执行冒烟测试等原因,只想测试指定用例,在pytest中有几种方法可解决

  1. 显式指定函数名,通过::标记,例如:某文件内存在两个类,但一个类尚未完成,只想执行第二个类中的用例,就可指定类执行
  2. pytest -vs test_learn.py::Testpy2 # 只执行文件中的Testpy2类 pytest -vs test_learn.py::Testpy2::test_method # 只执行文件中Testpy2类下的test_method方法
  3. 使用模糊匹配,通过-k参数识别关键字,例如:
  4. pytest -k login test_learn.py # 只执行文件中包含关键字login的用例
  5. 使用pytest.mark在用例上进行标记,标记需要在pytest.ini文件中配置,配置方法见上文,格式一定要写对,若未配置也可执行,但是会出现警告,配置中冒号前是标记名,冒号后可以理解为标记解释,当然也可以前后一样
  6. @pytest.mark.check # 在函数上设置标记 def test_func1(self): assert 1 == 1 @pytest.mark.output # 在类上面设置标记,对类中所有方法都有效 class caseCls(object): def dyd_case(self): @pytest.mark.smoke def test_func1(self): # 在类中的方法上设置标记 print("这是Pytest")
  7. 执行带有标记的函数,使用-m参数
  8. pytest -m check test_learn.py # 执行带有check标记的用例,此标记在一个函数上标记了一次,所有只会执行一条用例 pytest -m smoke test_learn.py # 执行带有smoke标记的用例,此标记在一个方法上标记了一次,同样只会执行一条用例 pytest -m output test_learn.py # 执行带有output标记的用例,因为用例在类上,故类中所有的用例都会被执行

Pytest运行

  1. 通过命令行运行
  2. pytest -vs /package_name # 执行包中所有模块的用例 pytest -vs file_name.py # 执行单独的pytest模块,file_name.py文件 pytest -vs file_name.py::class_name # 只执行文件中的class_name类 pytest -vs file_name.py::class_name::method_name # 只执行文件中class_name类下的method_name方法 pytest -vs file_name.py::function_name # 只执行文件中function_name函数
  3. pytest命令参数
  • -v 展示每个测试函数的执行结果(详细信息)
  • -q 只显示整体测试结果(简要信息)
  • -s 展示测试函数中print()函数输出信息
  • -k 只执行包含关键字的用例
  • -m 只执行指定标记的用例
  • -x 出现失败用例则立即停止执行
  • -l 用例失败时打印相关局部变量
  • -c 从指定目录加载配置文件,而非自动查找配置文件
  • -lf 只执行上次失败的用例,若没有则执行全部用例
  • -ff 先执行完上次失败的再执行剩余的用例
  • -tb=style 用例失败时错误的详细程度(auto/long/short/line/native/no)
  • --maxfail=num 用例允许失败的最大次数,超出则立即停止执行
  • --collect-only 收集但不执行用例
  • --durations=num -vv 显示设定数值内,按照耗时时长降序打印结果,通常用于调优
  • -h,--help 帮助
  • 通过main方法
  • if __name__ == '__main__': pytest.main(["-sv", "file_name.py"]) # 通过main函数执行

示例:

# 文件名称命名规则,以test_开头或_test结尾
import pytest
def test_func():	# 通常在类外面称为函数,函数命名规则,以test_开头
    assert 1 == 1
class Testpy(object):		# 类命名规则,以Test开头
    def test_method(self):	# 通常在类中称为方法,方法命名规则与函数一样,以test_开头
        assert 1 + 2 == 3
    @pytest.mark.smoke
    def test_func1(self):
        print("这是Pytest")
@pytest.mark.smoke
class caseCls(object):
    def dyd_case(self):
        print("修改函数后的规则后")
if __name__ == '__main__':
    pytest.main(["test_learn.py"])	# 通过main函数执行命令

使用命令执行示例中的用例

pytest ../Pytest								# 执行包中所有模块的用例
pytest -vs test_learn.py						# 执行单独的pytest模块,test_learn.py文件
pytest -vs test_learn.py::Testpy				# 只执行文件中的Testpy类
pytest -vs test_learn.py::Testpy::test_method	# 只执行文件中Testpy类下的test_method方法
pytest -vs test_learn.py::test_function			# 只执行文件中test_function函数
pytest -m smoke test_learn.py					# 执行带有smoke标记的用例
pytest -k dyd test_learn.py						# 只执行包含关键字dyd的用例
pytest --maxfail=2 test_learn.py				# 执行指定文件中的用例,失败用例超出2条则停止执行
pytest --collect-only test_learn.py				# 收集指定文件中的用例,不加文件名则直接搜索

你可能感兴趣的:(pytest,自动化测试,自动化)