pytest入门

172 阅读3分钟

本人是一个后端程序员,对测试感兴趣,所以了解了一下这个pytest,目前还处于摸索阶段,以下写的都是亲自验证过的。

安装介绍:

pytest是一个成熟的python的单元框架。

可以和selenium,requests,appium结合实现web自动化,接口自动化,app自动化

pytest可以实现测试用力的跳过以及returns失败用例重试

pytest可以和allure生成非常美观的测试报告

拥有非常强大的插件。

pytest

pytest-html (生成Html格式的自动化测试报告)

pytest-xdist (测试用例分布式执行,多cpu分发)

pytest-ordering (用于改变测试用力的执行顺序)

pytete-rerunfailures (用例失败后重跑)

allure-pytest (用于生成美观的测试报告) 以上这些可以全部写在一个文件中,名字可以设置为:reuqirement.txt 方便统一安装。文件内容如下: pytest pytest-html pytest-xdist pytest-ordering pytest-rerunfailures allure-pytest pyyaml requests

安装命令如下:

pip install -r reuqirement.txt

pytest默认的测试用例规则和基础应用

1. 模块名必须以test_开头或者_test结尾

2.测试类必须以Test开头,并且不能有init方法

3.测试方法必须以test_开头

image.png 在这里有一个很关键的文件:pytest.ini 是pyetst单元测试框架的核心配置文件

位置:一般在项目的根目录

作用:可以改变Pytest默认的行为

运行的规则:不管事主函数模式执行或命令行模式运行,都会去读取这个配置文件。

内容如下:

[pytest] addopts = -vs -W ignore::UserWarning --alluredir=./temp --clean-alluredir

testpaths = ./

python_files = test_*.py

python_classes = Test*

python_functions = test

运行方式:

. 主函数模式

image (1).png

参数详解

-s:表示输出调试的信息,包括print打印的信息

-v:输出详细的信息 比如:pytest -v

-n:支持多线程或者分布式运行测试用例 比如:pytest -n 2

--reruns NULL 失败用例重跑 比如:--reruns num(这个前提是需要安装插件:pytest-rerunfailres)

-x:表示只要一个用例报错,那么测试停止 比如:pytest -vs -x

--maxfail=2 出现两个用例失败就停止 比如:pytest -vs --maxfail=2

--html 生成html的测试报告(前提安装插件:pytest-html) 比如:pytest -vs --html ./reports/result.html

-k:根据测试用例的部分字符串来指定测试用例 比如: pytest -vs -k "baidu"

或者:pytest -vs -k "baidu or xingyao"

.命令行模式

image (2).png

或者在命令行执行:pytest -vs test_login.py

指定文件夹执行:pytest.main(['-vs','./interface_testcase'])

通过nodeid来指定用例执行,nodeid由模块名,分隔符,类名,方法名,函数名组成。 例如test_login.py文件内容如下

import pytest 
def test_02(): 
    print("函数") 
class TestLogin: 
    def test_01(self):
        print('测试')

run.py文件内容如下:(这里的run.py放在项目根目录下面,是整个框架的启动文件)

import pytest
if __name__ == '__main__': 
    pytest.main(['-vs','./test_login.py::test_02']) #下面这一行代表执行类名下的某一个方法 
    pytest.main(['-vs','./test_login.py::TestLogin::test_01'])


最后补充一下,如果在执行的时候,遇到中文乱码问题,大家可以在需要在pytest.ini里面加一行:

disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True

后续我会慢慢在补充。目前本人也是在摸索阶段,已经自己可以做接口自动化的全部流程。大家多多交流哇