pytest 接口自动化测试

一、基础 - requests模块

从web抓取信息——Requests_power query怎么先提交web请求再提取返回数据-CSDN博客

第三方模块requests常用方法及Response对象属性和方法详解

第三方模块requests中data和json传参方式详解

第三方模块requests对于Cookie鉴权以及Session鉴权的处理

requests模块底层原理以及接口统一请求封装

二、框架 - Pytest框架

Pytest框架简介,默认测试用例规则,运行方式详解以及前后置夹具应用处理。

Pytest框架之@pytest.fixtrue装饰器以及通过 conftest.py文件实现全局前置应用。

Pytest实现接口自动化断言以及结合allure- pytest插件生成企业级Allure测试报告

接口自动化测试框架请求封装以及接口关联框架封装改进。

pytest简介

pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,支持非常丰富的插件,同时兼容 unittest 框架。

它可以和很多的工具或框架,selenium,requests,appium实现多种自动化测试。
它可以和allure结合生成美观的报告以及和jenkins实现持续集成。

最重要的是,它有很多的插件:

  • pytest-html生成html报告插件
  • pytest-xdist 多线程
  • pytest-ordering标记测试用例的执行顺序
  • pytest-returnfailers失败用例重跑
  • pytest-base-url 管理基础路径
  • allure-pytest 生成allure报告
  • pytest
  • requests
  • pyyaml

pytest框架的安装:pip install pytest

pytest框架优点

1、简单灵活,容易上手;

2、支持参数化;

3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appium等自动化测试,接口自动化测试(pytest+request);

4、pytest具有很多第三方插件,并且可以自定义扩展。

pytest框架使用注意事项

1、 .py 测试文件必须以test_开头(或者以_test结尾)

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

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

4、断言必须使用 assert

pytest运行方式

1、如果不提供任何参数,那么pytest会在当前目录及子目录下寻找以test_开头或者以_test结尾的测试文件,且该文件中以test_开头的测试函数

2、当运行时指定测试文件的时候

    ①此时目录一定要切换到测试文件所在的目录,否则pytest搜索不到测试,不会执行.

    ②执行测试文件里的函数的时候,会搜索以test_开头的测试函数执行,不符合此规则的函数不会被执行

    ③如果含有测试类,那么允许该测试文件时,会搜索类名以Test开头的类,且该测试类中的函数命名也必须符合要求才会被执行

    ④运行的方式可以在命令行也可以在主方法上面运行

例如:指定运行pythonDemo目录下的test_01模块

......

if __name__ == "__main__":

pytest.main(["pythonDemo/test_01.py"])

或者命令行模式:

pytest pythonDemo/test_01.py

pytest.main(['-vs'])运行时打印调试信息

pytest框架作用

1.发现用例:根据每个框架默认的规则去发现并且加载测试用例

2.执行用例:将测试用例安装一定的顺序和条件执行,并生成结果

3.判断结果:通过断言来判断实际结果和预期结果是否相同

4.生成报告:统计测试进度,耗时,通过率,生成报告。

执行测试用例时的前后置处理

第一种:和unittest相似

测试用例之前:setup()

测试用例之后:teardown()

类前执行:setup_class()

类后执行:teardown_class()

第二种:fixture固件

更强大,可以更加随心所欲地设置前后置处理。

装饰器

@pytest.fixture(scope="",params="",autouse="",ids="",name="")

  • scope:作用域,作用于哪些用例
    • function(): 默认
    • class
    • module
    • package/session 包/会话
  • params:数据驱动
  • autouse:True:自动作用,False:手动作用
  • ids:当数据驱动时更改参数名
  • name:fixture的别名

第三种:@pytest.mark.usefixtures

使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例。

叠加usefixture  ,如果一个方法或者一个class用例想要同事调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加,注意叠加顺序,先执行的放底层,后执行的放上层。

usefixtures和传fixture的区别:

如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别,当fixture需要用到return的参数时,只能将参数名称直接当参数传入,不适合使用usefixtures,只有不需要用到return出来的参数时,两种方式都可以。

举例1:在test_register前执行查询数据库操作

结果:

举例2:在test_register前后都执行查询数据库操作

yeild是生成器,可以多次返回数据,在此处的作用是唤醒执行用例后的操作。 

结果

 举例3:在每个用例前后执行查询数据库的操作 

 举例4:yeild可以返回值

举例5: 利用params传参进行数据驱动

结果

举例6 :ids当数据驱动时更改参数名

 举例7:name:fixture的别名,调用时直接使用别名

python+pytest+requests

单个接口调试

1.Post请求

文件上传,文件所在路径

如果用左斜杠,一个就好;用右斜杠,要用两个,其中一个表示转义符;如果是绝对路径,也可以在前面加r。

2.Get请求,查询已上传的文件

3.PUT请求,更新文件

接口关联

举例:PUT请求更新文件后,再用GET请求查询是否已更新。

思路:在类中创建一个全局变量,可以供类中的每个方法调用,从而实现接口关联。PUT请求的返回值(更改全局变量)作为GET请求的输入值。

接口自动化框架封装

1.统计数据

2.异常处理

    try except

3.日志监控 

统一封装:所有封装放在common包里面

WEB项目接口间基本都存在cookie关联。requests.session能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

    requests.session的作用:
        自动处理cookie,即下一次请求会带上前一次的cookie。
    requests.session的应用场景:
        自动处理连续的多次请求过程中产生的cookie。

 

​ 

​ 

三、封装

Yaml测试用例详解以及Yaml语法规则详解以及读写和清除

Pytest+Paramatrizes+Yaml实现接口自动化 yaml测试用例数据驱动。

接口自动化框架集成Jenkins实现CI持续集成构建接口自动化生态体系

企业级接口自动化测试框架技术深入探讨和实现

1.YAML文件用途,结构,数据类型详解
2.Pytest用例管理框架数据驱动详解
3.Pytest结合Yaml实现数据驱动
4.pytest结合allure-pytest插件生成alture测试报告
5.接口自动化测试框架技术框架深入探讨和落地实施 

requirements.txt

所有模块、插件放进requirements.txt中。在Terminal中输入pip install -r requirements.txt,可以安装全部模块/插件。

一般来说,main方法放在最外层,新建一个run.py文件。

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

-v显示更详细的信息

-vs一起使用

-n支持多线程或者分布式运行测试用例

统一封装:所有封装放在common包里面 

conftest.py (命名固定)专门用来保存固件的文件

数据怎么实现关联?——用Yaml 文件保存,Yaml文件可以自动转换为json/字典格式。不用excel格式是因为Excel不能自动转换为字典,不好处理各种数据格式。

New file - xxx.yaml (例子:extract.yaml),所有数据都放到yaml文件。

Commom包下 - New Python file - yaml_util.py,对yaml文件做读写

读取yaml文件

with open(os.getcwd()+"/extract.yaml", encoding="utf-8") as f:

#os.getcwd根目录

结果:

 写入Yaml文件、清空yaml文件

mode = 'a',表示追加;

mode = 'w',表示清空。

运行结果: 

 实战:将access_token写入Yaml文件

再获取access_token

结果:把access_token自动存入yaml

 

改进:在执行之前先清空yaml文件。

Yaml文件 

YAML文件用途,结构,数据类型详解

YAML是一种可读性高,易于理解,用来表达数据序列化的数据类型。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。它可以和json之间灵活切换,支持注释,换行,字符串。

YAML的配置文件后缀为 .yml

用途:配置文件;编写测试用例。

数据结构:

1.Map对象(键:(空格)值)key: value

name: Amy

2.数组(list):用一组横线“-”开头来表示

- name: Amy

- name: Bob

Pytest用例管理框架数据驱动

数据驱动 :其实就是把我们测试用例的数据放到excel,yaml,csv,mysql,然后通过去改变数据达到改变测试用例的执行结果 。

数据驱动装饰器

@pytest.mark.parametrized() 装饰器可以实现对测试用例的参数化,方便测试数据的获取。

第一个参数是字符串,多个参数中间用逗号隔开

第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

  • 传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
  • 传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化

Pytest结合Yaml实现数据驱动

新建get_token.yaml

注意层级关系

Pytest结合allure-pytest插件生成allure测试报告

1.下载Allure,解压,配置path环境变量(路径中不能含中文)
验证:allure --verison(在dos和pycharm中都验证一次)需要jdk如果Pycharm验证失败,需要重启Pycharm,让环境生效
2.在Pytest.ini中中加入命令
--alluredir=./temps --clean-alluredir
3.生成allure报告

要思考的问题:
传键值对、json、文件上传
接口关联,动态参数,接口加密,接口签名,接口鉴权
动态参数、文件上传、断言(数据库操作)、解决yaml文件中数据量太大的问题(参数化:excel,csv,yaml)、yaml里面如何保存变量及调用函数 Yaml里面如何实现数据驱动?
Yaml里面如何保存变量以及调用函数?企业自动化框架具体什么样?断言

接口自动化测试框架技术框架深入探讨和落地实施。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值