IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> unittest+requests接口自动化 -> 正文阅读

[开发测试]unittest+requests接口自动化

接口自动化
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:as sert只有一个
    (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元素。
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:39:53  更:2021-08-05 17:40:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:39:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码