Pytest入门[3]

目录

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

二、pytest详细介绍

三、pytest的运行方式

四、改变pytest用例执行顺序

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

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

七、生成漂亮的allure报告

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

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


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

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

2.测试类必须以Test开头

3.测试方式必须test_开头

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

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

3.判断测试结果,断言

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

python:pytest,unittest

java:junit,testng

二、pytest详细介绍

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报告

三、pytest的运行方式

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                指定带标记的测试用例

四、改变pytest用例执行顺序

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

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

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

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文件管理

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

思想比脚本重要

七、生成漂亮的allure报告

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)

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值