unittest+requests接口自动化

本文详细介绍接口自动化测试技术,包括requests库使用、pytest框架规则、数据驱动方法及yaml配置的应用。探讨了热加载、单元测试框架对比等内容,并介绍了POM设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口自动化
requests库:用来发送http请求,接收http响应
0pytest命名规则:
  • 模块名必须以test_开头或_test结尾
  • 测试类必须以Test开头,并且不能有__init__方法
  • 测试方法必须以test开头
一、安装
pip install requests
二、使用
request对象常用的方法
requests.get()
requests.post()
    data用于传输键值对的字典,{name:"sxp",age:"18"} 无嵌套的使用data
    json用于传输json格式的字典,{stu1:{name:"sxp",age:"18},stu2:{name:"haha",age:"19"}}有嵌套的使用json
    files用于传输文件(具体参数可以到requests.post的源码中查看注释)
requests.put()
requests.delete()
requests.request()
  • response对象常用的方法
三、目前企业当中最主流得接口自动化测试技术体系
requests+pytest+allure+yaml+parametrize+config_logging体系
第一个阶段:写接口测试自动化得用例
第二个阶段:写接口自动化的测试框架并且维护这个框架
四、pytest数据驱动
  • 概念:把我们的测试用例数据放到excel/yaml/csv/mysql然后通过改变数据而改变测试用例的执行结果。
  • @pytest.mark.paramtrize(args_name,args_value)装饰器
            args_name:参数名
            args_value:参数值(list,tuple,字典列表,字典元组)参数的值有多少个,则测试方法就会执行多少次
            场景:同一个业务逻辑会存在许多组数据
            yml文件:    
            读取yml函数:
            parametrize:
  • 使用key来获取数据驱动传入的字典
  • 如何传入两个参数?
五、yaml介绍
  • 概念:yaml是一个数据文件,保存的时个数据格式,支持注释,换行,裸字符串(最小单位的数据)
  • 用途
    用于全局配置文件:环境,数据库信息,账号信息,日志格式,报告名称
    用于接口自动化里面的多接口串联
    用于编写接口测试用例
  • 语法规则
    区分大小写
    通过缩进的方式来表示层级关系(不可以使用tab缩进,只能使用空格)
    和缩进多少层无关,只和左边是否对其有关
    #表示注释
  • yaml常用数据结构
    map对象(键值对):dict      如:name:sxp
    数据(列表list):用以组横线开头(横线后必须有空格)
    如:
    name:
       - sxp
       - sxp1
       - sxp2
  • 如何读yaml文件
    yaml.load()
  • 如何写入yaml文件
    yaml.dump()
六、封装
  • 封装的原则:能够覆盖到所有的请求情况
    get:url,params(非嵌套的字典格式)
    post:url,data,json,files
    put:url,data
    delete:url
    其他:headers/cookies
  • post请求的data为文件格式时,需要使用open函数转换为文件流。如:
    但在yaml中是不支持配置open函数的。所以我们要在封装的requests方法里面对files类型的参数进行同义转换
七、热加载(未做过多介绍,可以自己查一下资料)
  • 概念:在代码运行过程中,实时的去调用python的方法并执行得到返回值
八、单元测试框架对比
常见的单元测试框架
  • 基于python:unittest和pytest
    基于java:junit和testng
  • unittest和pytest的区别
    (1)用例编写规则
    unittest:提供了testcase测试用例、testsuites测试套件、testfixtures测试夹具、testload测试加载器、testrunner测试运行器。必须遵守以下规则:
    1、测试文件必须先倒入import unittest
    2、测试类必须继承unittest.TestCase
    3、测试方法必须以test开头
    pytest:是python的第三方测试框架。基于unittest扩展的框架。必须遵守以下规则:
    1、测试文件名必须以test_开头或者以_test结尾
    2、测试类名必须以Test开头
    3、测试方法必须以test开头
    (2)用例的前置和后置
    unit test:
    setUp/tearDown:在每个用例之前或之后运行一次
    setUpClass/tearDownClass:在每个类运行之前或之后运行一次
    setUpModule/tearDownModule:在每个模块之前和之后执行一次
    pytest:
    方法级:setup_method/teardown_method和setup/teardown两个都是在方法之前和之后执行一次,两个都存在的情况下先执行前者再执行后者
    函数级:setup_function/teardown_function:在函数之前和之后
    类级别:setup_class/teardown_class
    模块级:setup_module/teardown_module
    装饰器:@pytest.fixture()
    (3)断言
    unittest:assertTure、assertEqual、assertIn等
    pytest:assert只有一个
    (4)报告
    unittest:htmltestrunner
    pytest:插件pytest-HTML、allure
    (5)失败重跑
    unittest:没有
    pytest:pytest-rerunfallures插件
    (6)数据驱动
    unittest:ddt
    pytest:@pytest.mark.paramtrize装饰器
    (7)用例分类执行
    unittest:默认执行所有,可以通过testsuite来执行部分用例,或者-k参数
    pytest:@pytest.mark
  • 单元测试框架主要做了什么
    1、测试发现:从多个py文件中收集并且加载测试用例
    2、测试执行:将测试用例按照一定的顺序和条件去执行并且生成结果
    3、测试判断:通过断言判断结果是否正确
    4、测试高高:统计测试进度、通过率、生成报告
Unittest
  • 定义:单元测试框架,测试程序的最小单元(函数\方法),并且每个函数的方法是独立的
  • 框架底层原理:
    module='__main__’,   测试用例所在的路径 __main__表示当前模块
    defaultTest=None,    待测试用例的名称,默认是所有
    argv=None,    接收外部的参数
    testRunner=None,    测试运行器
    testLoader=loader.defaultTestLoader,    指定使用默认的测试用例加载器
    exit=True,    是否在测试完成之后结束python程序
    verbosity=1,    类似于命令行的-v 0,1,2
    failfast=None,
    catchbreak=None,
    buffer=None,
    warnings=None,
    tb_locals=False
  • 自动化框架组成部分:
    单元测试框架
    pom:页面对象模型
    Ddt数据驱动
    全剧配置文件封装
    selenium二次封装
    日志监控
    断言、邮件发送等等
  • 重要组件
    1、TestCase
    2、TestSuite
    main方法
    unittest.TextTestRunner().run(suite)
    3、TestFixture
    4、TestLoader
    5、TestRunner
  • 使用方式:创建类的时候继承unittest.TestCase类
  • 运行方式:
    1、pycharm直接run运行方法
    2、python -m unittest test.Test.test01命令行输入【文件名.类名.方法名】运行(集成jenkins时比较常用)
    -m  以二进制脚本方式运行一个模块
    -v   显示详细执行结果信息
    -k   匹配模式运行测试用例。 1、通配符-k *_weiwei。 2、-k weiwei
    3、使用unittest.main(),以模块的方式运行
    配置pycharm的环境或者使用python 模块名.py
  • 用例执行顺序
    按照ascii码的顺序执行:【0~9 A~Z a~z】
  • 忽略测试用例
    1、@unittest.skip("忽略测试用例")
    2、@unittest.skipIf(age>=18 and age<=25,"18<=age<=25 的时候会被忽略")
    3、@unittest.skipUnless(age<18,"age<18时忽略")
    如果使用pycharm直接运行的时候没有打印出来skip信息,说明日志级别没有调整。或者使用命令行- v的方式 或者使用main函数配置日志等级的方式:unittest.main(defaultTest='suite',verbosity=2)
九、断言
  • 断言是测试方法中必不可少的部分
    1、状态断言:一定要有
    2、业务断言:可以有多条
  • 常用的六种断言
  • 实例:访问网页并且保存cookie 跳过验证码登录
十、Cookie
  • 定义:cookie是在服务器产生的存储在客户端的一小段文本信息,格式是字典,键值对
  • 分类:
    会话级:保存在内存中当浏览器关闭就会丢失
    持久化:保存在硬盘,只有当失效时间到了才会被清除
  • 查看cookie:
    打开浏览器- F12-Application-cookies
    常见字段包含:name、value、domain、path、expires、size
    name:开发自定义的cookie名称
    value:cookie值
    domain:cookie所作用的ip
    path:cookie作用的IP所在目录
    expires:sission---会话级    具体日期---持久化
    size:cookie大小
  • 如何实现鉴权?
    当客户端第一次访问服务器时,服务器就会产生Cookie,然后通过响应头的方式在Set-Cookie传输到客户端,客户端从2-N词请求都会自动带上这些cookie
  • 弱点:
    cookie保存在客户端,对于一些敏感信息:用户名、密码、身份证。不安全 
  • 代码实现cookie鉴权
十一、Session
  • 定义:当用户第一次访问服务器的时候,在服务器端保存一个sessionid这个sessionid时经过加密的,然后通过cookie把这个sessionid保存到客户端,请求服务器的时候只发送sessionid
  • 当使用session鉴权的时候,需要把session设置为全局变量,否则在不同方法中调用的时候会产生不同的session,无法实现功能
  • session鉴权的弱点:虽然解决了cookie的不安全问题,但是又出现了新的问题。sissionid 是保存在服务器的,当用户量特别大的时候会导致服务器崩溃
    解决方式:请求IP捆绑、session复制、单点登录
十二、token鉴权
  • 定义:当用户登陆后给他发送一个token令牌,下一次用户再次请求的时候只需要带上这个令牌。
  • 由于token可以通过抓包获取,可以通过加密的方式保证token的正确性和保密性
    对称加密:DES。AES
    双钥加密:RSA
    只加密不揭秘:MD5 SHA
  • token的分类:
    access_token:有时间限制,限制在15分钟
    refresh_token:一般15天
  • cookie、session、token鉴权方式的相同点和区别?
相同点:都是用于做鉴权的,都是服务器产生的。
区别:
1、cookie是存储在客户端,session存储在服务器。session安全性比cookie高,所以一般情况下把重要的信息放到session把不重要的放在cookie
2、session存在服务器内存,token存在服务器的文件或者数据库中,token的好处就是比session更节省服务器资源。token只需要在服务器揭秘即可
  • 为什么有postman和jmeter还需要做代码级别的接口自动化?
1、敏捷开发,接口量巨大
2、工具太死板,无法自定义一些功能
3、一个项目中有多种协议的接口
4、定位问题,使用工具会比较繁琐
5、工具没有办法生成美观的报告
6、对于复杂的接口,多接口串联和数据库操作使用工具不方便
7、日志监控
十三、POM
  • 为什么要引入POM
    可以让我们的测试代码变得可读性更好,可维护性更高,复用性更高
  • 定义:页面对象模型(Page Object Model)是一种设计模式,用来管理维护一组web元素集的对象库
    在POM下,应用程序的每一个页面都有对应的page class
    每个page class维护着该web页的元素集和操作这些元素的方法
    page class中的方法明明最好根据其对应的业务场景进行,例如:通常登陆后我们需要等待几秒钟,可以这样命名waitingForLoginSuccess()
    POM的代码目录组织示例:
  • 优势:
    1、提供了一种在UI层操作、业务流程与验证分离的模式,使得测试代码变得更加清晰和高可读性
    2、对象库与用力分离,使得我们更好的复用对象,甚至能与不同的工具进行深度结合应用
    3、可复用的页面方法代码会变得更加优化
    4、更加有效的命名方式是我们清晰的知道方法所操作的UI元素。
### 回答1: Python的unittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittestrequests库搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittestrequests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittestrequests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittestrequests库搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittestrequests库搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittestrequests库的读者来说,是一篇非常有价值的文章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值