Pytest入门[3]

一、pytest默认的测试用例规则

二、pytest详细介绍

三、pytest的运行方式

四、改变pytest用例执行顺序

五、pytest还有一些前后置功能

六、接口关联(需要把所有的全局变量都集中管理)

七、生成漂亮的allure报告

八、解决一个接口只有一个用例的问题?(数据驱动)

九、90%企业都是通过Yaml来管理接口自动化测试的用例

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

2.测试类必须以Test开头

3.测试方式必须test_开头

1.发现测试用例:从多个py文件里面找到我们的测试用例

2.执行测试用例:按一定的顺序执行,并且生成报告

3.判断测试结果,断言

4.生成测试报告:allure报告

python:pytest,unittest

java:junit,testng

1.pytest是一个成熟的python单元测试框架

2.它能够和自动化测试工具,selenium,requests,applum结合实现自动化

3.skip跳过用例,reruns失败用例重跑,多线程。

4.pytest和allure生成美观的测试报告。

5.它结合jenkins实现持续集成。

6.pytest有很多的插件

pytest 本身

pytest-html 生成html报告的插件

pytest-xdist 实现多线程

pytest-ordering 改变测试用例的执行顺序

pytest-rerunsfailures 失败用例重跑

allure-pytest 生成allure报告

1.main()方式运行

if __name__=='__main__':
    pytest.main(['-vs'])

2.命令行方式运行

pytest -vs

3.通过配置文件pytest.ini运行

不管你是main方式运行也好,还是命令行方式运行也好,都会自动的读取这个配置文件去执行

-vs -v打印详细信息,-s打印调试信息

-n -n表示多线程运行

–reruns 失败用例重跑(–reruns 2 用例失败后执行两次)

–html=路径 生成html的报告

-m 指定带标记的测试用例

class TestMashang:
     @pytest.mark.run(order=2)
     def test_baili(self):
         print("百里")
     @pytest.mark.run(order=1)
     def test_weiwei(self):
         print("微微")

每个用例之前和之后,以及每个类之前和之后

def setup(self):
    print("在每个用例之前执行一次,如:打开浏览器,加载网页")
def teardown(self):
    print("在每个测试用例之后执行一次,如:关闭浏览器")
def setup_class(self):
    print("在每个类之前执行一次,创建日志对象,创建数据库连接")
def tear_down(self):
    print("在每个类之后执行一次,关闭数据库连接,销毁日志对象")

如果有10000个用例,我希望的是在其中的三个用例里面需要做前后置

部分类前后置。使用fixture装饰器。

方法如下:

@pytest.fixture(scope=”作用域”,params=”数据驱动”,autouse=”自动执行”,ids=”数据驱动时重命名参数名”,name=”给fixture作用的函数重命名”)

1.scope参数 :

function 函数

class 类

module 模块

package/session 回话

部分类的前后置

@pytest.mark.usefixtures('execute_database_sql')
class TestAaa:
   def test_aaa(self):
       print("test_aaa")

会话的前后置,一般会结合conftest.py文件一起使用

1.conftest.py单独用于存放fixture固件的配置文件

2.在conftest.py中固件在使用时不需要导包。

3.可以有多个conftest.py文件

比较成熟的是:通过一个单独的yaml文件管理

接口自动化测试框架封装的第一步:接口关联封装

思想比脚本重要

1.官网下载allure

下载之后解压保存到E盘,并且需要把bin路径配置到path里面

2.验证allure安装是否成功

allure –version

3.生成allure报告

(1)生成临时的json格式的报告

(2)生成html报告

   os.system("allure generate ./temps -o ./reports --clean ")

@pytest.mark.parameter(args_name,args_value)

args_name:参数名,字符串

args_value:参数值,(list,tuple,字典列表,字典元组),有多少个值那么测试用例就会执行多少次

第一种用法:

@pytest.mark.parameter("caseinfo",['百里','微微','晴天'])
def test_get_token(self,caseinfo):
    print(caseinfo)

第二种用法:解包

@pytest.mark.parametrize("name,age",[['百里','13'],['依然','11']])
def test_get_token(self,name,age):
    print(name,age)

yaml是一种数据格式,主要用于配置文件或编写用例

yaml只有两种数据

1.键值对:

access_token:value

2.list.用一组横线开头表示(-)

操作yaml所使用的第三方库不是yaml,而是pyyaml

一个py文件可以有多个接口

一般一个接口对应一个yaml文件,一个yaml文件里面就有几十个用例,有正例和反例。

class AllRequest:
    session = requests.session()
    def all_send_request(self,method,url,data,**kwargs):
        method=str(method).lower()
        res=None
        if method =='get':
            res=AllRequest.session.request(method=method,url=url,params=data,**kwargs)
        elif method=='post':
            strdata=json.dumps(data)
            res=AllRequest.session.request(method=method,url=url,data=strdata,**kwargs)
        else:
            print("不支持的请求方式")
        return res

Original: https://blog.csdn.net/fanfangyu/article/details/122595778
Author: 菜鸟教程
Title: Pytest入门[3]

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/773500/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球