文章目录

  • 一、数据格式
    • 1. yaml的简介
    • 2. json的格式
    • 3. yaml的读取方法
  • 二、HttpRunner
    • 2.1 什么是HttpRunner
    • 2.2 HttpRunner 环境搭建与命令
    • 2.3 建立HttpRunner测试项目
      • 1. 创建一个httprunner的项目
      • 2. httprunner_api
      • 3. httprunner框架的一些参数配置
      • 4. httprunner中extract响应数据提取
      • 5. httprunner的三种参数化

一、数据格式

1. yaml的简介

yaml是一种数据格式,支持注释,通过#注释

  • 语法规则:
    区分大小写
    使用缩进判断层级关系
    # 注释

2. json的格式

map对象,又称:字典dist {name: 百里}
数组:又称:列表list [{name: 白里1},{name: 白里2},{name: 白里3} ]

  • JSON和YAML是可以相互转换的
# MAP对象
# 两种格式
泡泡: {name: "泡泡"}可可: name: "可可"
# 数组
数组1: [{name: 可可1},{name: 可可2},{name: 可可3}]数组2:- name: "可可1"- name: "可可2"- name: "可可3"

3. yaml的读取方法

  1. 普通的读写方法
import yamlclass YamlUtil:def __init__(self,yaml_path):self.yaml_path = yaml_path# 读取 dist or listdef read_yaml(self):with open(self.yaml_path,"r",encoding="utf-8") as f:yaml_data = yaml.load(f,Loader=yaml.FullLoader)return yaml_dataif __name__ == '__main__':res = YamlUtil('test.yaml').read_yaml()print(res)# [{'name': '测试读取', 'request': {'method': 'GET', 'url': 'www.baidu.com', 'data': {'type': 'client'}}, 'validate': [{'equals': {'status': 200}}, {'contains': 'access_code'}]}]
  1. 使用ddt读取yaml
import unittest
from ddt import file_data, ddt@ddt
class GzhCase(unittest.TestCase):# 这个装饰器可以读取文件@file_data('test.yaml')def test_01_get_token(self, **kwargs):print(kwargs)print(kwargs['name'])print(kwargs['validate'])if __name__ == '__main__':unittest.main()
  • bug: 当鼠标放在方法上执行时报错
    AttributeError: type object 'GzhCase' has no attribute 'test_01_get_token'
    原因:
    加了ddt后,运行时要先识别装饰的类。若将光标放在某一个方法后面的话,测试用例只会执行当前的方法,ddt识别不到类,就会报错。
    解决:
    将光标放到外面或者通过main方法运行,就不会报错

二、HttpRunner

2.1 什么是HttpRunner

  1. HttpRunner简介
  • 它是面向http协议的测试框架,只要去维护一份yaml/json文件就可以实现自动化测试、结合locust性能测试,线上性能监控,持续集成等多种需求
    (junit,testing,unittest,pytest,httprunner,robotframework)
  • 有两个版本 2.x和3.x
  1. 设计思想和理念
  • 重复复用优秀的开源项目(不追求重复造轮子,而是将轮子组装成战车)
  • 约定大于配置(提升测试脚本的可维护性)
  • 配置文件组织测试用例(yaml/json)
  • 一次投入,多次复用
  • 高度可扩展性

2.2 HttpRunner 环境搭建与命令

  • 支持python2.7,推荐3.7

  • 安装httprunner (pip install httprunner,pip install har2case)

  • 验证环境(hrun -V,har2case -V)

  • 建议使用低版本的httprunner进行联系,或者学习一些4.x的操作:httprunner4.x

  • 五个命令

命令
httprunner 主命令
hrun httprunner的别名,用于运行yaml/json/pytest测试用例
hmake httprunner make的别名,将yaml/json转化成pytest文件
har2case httprunner har2case的别名,用于将har文件转化成yaml/json文件
locust 用于性能测试
  • 生成用例

    • 使用fiddler抓包导出har文件 (结合postman请求)
    • 打开pycharm将har文件转换为yaml文件
    • 运行yml文件
  1. 生成文件
命令
har2case xxx.har py文件的测试用例
har2case xxx.har -2y yaml文件的测试用例
har2case xxx.har -2j json文件的测试用例
  • 生成yaml文件
D:\PyCharm\Code\demo3\httprunner>har2case getTianqi.har -2y

  1. 生成py文件
D:\PyCharm\Code\demo3\httprunner>hrun getTianqi.yml

  • 踩坑:
    这里执行hrun的时候一直报错:Hint: make sure your test modules/packages have valid Python names.
    这是一个循环引用报错,原因是我将文件夹的名称设置为httprunner,与它本身的包文件起了冲突,_init_方法错误,后续更改文件夹名称即解决
  1. 执行py文件
    可以在执行结果中看到一些详细信息,包括请求信息以及响应信息


2.3 建立HttpRunner测试项目

1. 创建一个httprunner的项目

这里我重新下载了hrun的版本 pip install httprunner==2.3.0

  • 查看版本号报错:hrun -V
  • 参考解决
  • 检测版本
  • 创建项目
2. httprunner_api
  • 推荐一个免费的api接口网站
# demo_api.yml 写一条测试用例
name: 测试 api
variables:var1: value1var2: value2
request:url: https://eolink.o.apispace.com/xhdq/common/joke/getJokesByRandommethod: POSTheaders:X-APISpace-Token: "xxxxxxxxxxxxxxxxxxx"Authorization-Type: "apikey"Content-Type: "application/x-www-form-urlencoded"data:pageSize: 5
validate:- eq: ["status_code", 200]
  • 执行完毕之后,会自动生成测试报告,存放在reports目录下

  • request请求库api讲解

python 中非常流行的客户端请求模块,功能强大,api清晰明了

  • 常用的api
request
method GET,OPTIONS,HEAD,POST,PUT,PATCH,DELETE
url 指定请求的url
headers 指定请求头参数
params 指定查询字符串参数
json 传json格式的参数
data 传www-form表单参数
3. httprunner框架的一些参数配置
 01  环境变量
  • 在项目目录下的.env文件中存放环境变量,可以 通过${ENV(xxx)}在yml文件中调用
request:url: https://eolink.o.apispace.com/456456/weather/v001/nowmethod: GETheaders:X-APISpace-Token: "xxxxxxxxxxxxxxxxxxxxxx"Authorization-Type: "apikey"params:  # 指定查询的字符串areacode: ${ENV(AREACODE)}   # 调用环境变量
validate:- eq: ["status_code", 200]
D:\PyCharm\Code\demo5_hrun>hrun api/demo_api.yml --log-level debug
INFO     HttpRunner version: 2.3.0
INFO     Loading environment variables from D:\PyCharm\Code\demo5_hrun\.env
# 这里创建了环境变量
DEBUG    Set OS environment variable: AREACODE
...
================== request details ==================
# 可以看到查询的url中拼接了参数 areacode=101010100
url : 'https://eolink.o.apispace.com/456456/weather/v001/now?areacode=101010100'
 02  全局变量
  • 因为环境变量是所有接口都可以调用的,如果希望变量只在当前接口生效,则可以通过定义全局变量实现
  • 通过$xxx调用全局变量
# birth_api.ymlname: 测试 api2
# 定义全局变量
variables:moon: "12"day: "15"
request:url: https://eolink.o.apispace.com/birthday-pwd/api/v1/xzw/birthday_pwd/method: GETheaders:xxxx: "xxxxx"params:moon: $moonday: $day
validate:- eq: ["status_code", 200]

 03  httprunner_debugtalk.py
  • 如果需要动态地调用一些参数,可以通过在debugtalk.py文件中添加方法来实现
  • 在yml文件中通过${函数名()}调用
# debugtalk.py
import randomdef get_moon():moon = ["1","2","3","4","5","6","7","8","9","10","11","12"]return random.choice(moon)
# birth_api.ymlparams:moon: ${get_moon()}
 04  httprunner_baseurl
# base_url提取url中公共的域名部分
base_url: https://eolink.o.apispace.com
request:url: /birthday-pwd/api/v1/xzw/birthday_pwd/
 05  断言
validate:- eq: ["status_code", 201]
# 断言失败,实际与期望结果不符
DEBUG    start to validate.
DEBUG    extract: status_code   => 200
ERROR
validate: status_code equals 201(int)   ==> fail
200(int) equals 201(int)
  • 断言的另一种写法,可以在package中查看更多种类
    D:\Python39-32\Lib\site-packages\httprunner\validator.py
validate:#- eq: ["status_code", 200]- {"check": "status_code", "comparator": "eq", "expect": 200}- {"check": "content", "comparator": "contains", "expect": "message"}- {"check": "content.message", "comparator": "eq", "expect": "OK"}
4. httprunner中extract响应数据提取
  • 接口间存在依赖关系,则可以在testcase目录下定义接口依赖关系

config:name: "获取项目列表信息配置"base_url: https://eolink.o.apispace.com# 测试步骤
teststeps:
-name: 登录api: api/login.ymlextract:# 把响应报文中的 token 取出来- # 创建一个token的变量- token: content.token
-name: 获取项目列表信息# 在api/get_list.yml可以调用token ($token)api: api/get_list.yml
5. httprunner的三种参数化
  1. 方式一: 直接在当前文件下,添加用例信息
  • 登录接口 api/login.yml
name: 测试login
variables:username: "kk"password: "pwd"
base_url: https://eolink.o.apispace.com
request:url: /api/login/method: POSTheaders:Content-Type :  "application/json"json:username: $usernamepassword: $password
validate:- {"check": "status_code", "comparator": "eq", "expect": 200}
  • 登录接口配置 testcase/testcase_login.yml
config:name: "登录接口配置"base_url: https://eolink.o.apispace.comteststeps:
-name: $titleapi: api/login.ymlvalidate:- {"check": "status_code", "comparator": "eq", "expect": $status_code}- {"check": "content", "comparator": "contains", "expect": $contain_msg}
  • 登录接口套件 testsuits/login_suit.yml

config:name: "接口套件"testcases:
-name: 登录接口套件testcase: testcases/login_testcase.ymlparameters:# 方式一: 直接在当前文件下,添加用例信息- title-username-password-status_code-contain_msg:- ["正常登陆","keyou1","123456",200,"token"]- ["密码错误","keyou1","111111",400,"non_field_errors"]- ["账号错误","keyou1111","123456",400,"non_field_errors"]- ["用户名为空","","123456",400,"username"]- ["密码为空","keyou1","",400,"password"]
  1. 参数较多,参数复杂
  • 可以将测试用例信息存储在文件中
  • 在login_suit.yml中调用,使用 ${P(文件路径)},P代表获取参数
parameters:# 方式二:- title-username-password-status_code-contain_msg: ${P(datas/account.csv)}
  • 注意:在csv读取出来的数字或其他值,默认是字符串类型,可以在debugtalk.py中进行类型转化
  1. 动态生成用例
  • 在debugtalk.py中编写函数返回用例
def get_account():# 嵌套字典列表accounts = [{"title": "正常登陆", "username": "keyou1", "password": "123456", "status_code": 200, "contain_msg": "token"},{"title": "密码错误", "username": "keyou1", "password": "111111", "status_code": 400, "contain_msg": "non_field_errors"},{"title": "账号错误", "username": "keyou1111", "password": "123456", "status_code": 400, "contain_msg": "non_field_errors"},{"title": "用户名为空", "username": "", "password": "123456", "status_code": 400, "contain_msg": "username"},{"title": "密码为空", "username": "keyou1", "password": "", "status_code": 400, "contain_msg": "password"}]return accounts
  • 在login_suit.yml中调用,使用 ${函数名()}
parameters:# 方式三:- title-username-password-status_code-contain_msg: ${get_account()}
  • 使用py文件运行用例
# run.py
from httprunner.api import HttpRunnerhttprun = HttpRunner()
httprun.run(r"D:\PyCharm\Code\demo5_hrun\testsuites\login_suit.yml")
print(httprun.summary)

Python自动化测试学习3相关推荐

  1. 怎么自学python自动化测试-学习自动化测试,如何学习Python语言?

    一.Python常用领域Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件: Python用于系统编程,如开发系统应用: Python用于开发网络爬虫: 有资料奉上,可以看看 ...

  2. python自动化测试视频教程_精品系列-悠悠Python自动化测试学习视频,资源教程下载...

    课程名称 精品系列-悠悠Python自动化测试学习视频,资源教程下载 课程目录 第1课-http协议上 .mp4 第1课-http协议下.mp4 第2课-fiddler抓包与测试上.mp4 第2课-f ...

  3. python123测试_【测码学院】python自动化测试学习-自动化测试模型

    测码学院  python自动化测试学习 前言 自动化测试过程中,会通过模块的操作先后顺序进行代码编写,但对于整体性来说,需要先构建一个框架或者模型,便于后期对代码的维护,减少代码开发量以及维护成本.目 ...

  4. python自动化测试学习笔记合集

    python自动化测试学习笔记-1 一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行 ...

  5. python自动化测试学习路线(从入门到精通)

    目录:导读 一.Python的应用场景 二.自动化测试的那些事 三.主流自动化测试框架 三.Python自动化测试学习路线 写在最后 一.Python的应用场景 Python用于简单脚本编程,如编写2 ...

  6. 全栈Python自动化测试学习资料【付费资源、看到即赚到,】

    在测试行业从业了十多年积累了很多优秀的资料和素材,并且已经分门别类的整理好(不定期更新),从从0基础入门到高级课程,包含测试工具.学习资料(功能/性能/接口/自动化/app/web/思维导图).笔试面 ...

  7. python自动化测试学习笔记合集二

    python自动化测试学习笔记-4内置函数,处理json 函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改 ...

  8. python自动化测试学习笔记合集三

    上次我们学到了redis的一些操作,下面来实际运用以下. 这里我们先来学习一下什么是cookie和session. 什么是Cookie 其实简单的说就是当用户通过http协议访问一个服务器的时候,这个 ...

  9. python自动化测试学习路线

    一.Python的应用场景 Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件: Python用于系统编程,如开发系统应用: Python用于开发网络爬虫: 网络爬虫的用途是 ...

  10. Python自动化测试学习哪些知识?

    Python自动化测试学习哪些知识?先学习自动化测试基础,学习Appium操作,元素定位.操作.等待.滑动等,深入讲解PO.unittest.yaml.配置文件.测试报告等知识,基于关键字驱动.Pyt ...

最新文章

  1. windows链接Linux的pgsql,postgreSQL在CMD里怎么连接
  2. CCF发布2020-2021中国计算机科学技术发展报告
  3. 一些对制作网站有帮助的站点
  4. python的dll文件在哪_Python运行DLL文件的方法
  5. python学习笔记9-函数1
  6. java后端怎么返回音频流_Java语言中的IO流read()方法返回值为什么是int而不是byte?...
  7. 「HAOI2018」染色 解题报告
  8. 正弦函数_题型和解析 | 三角函数(补充)
  9. Rsyslog+LogAnalyzer+MySQL部署日志服务器
  10. 关于html5音频如何应用及解决方法?
  11. Spring-Boot 整合Dubbo 解决@Reference 注解为null情况
  12. 浅谈虚拟桌面上线推广的最佳时机
  13. MAC PS更换登记照背景颜色
  14. 救命稻草VirtualBox,失之交臂VMware—— 2者的guest OS对 恒通笔记本并口卡的支持
  15. 工业控制系统如何实现网络安全等级保护的相关要求
  16. caiguai docker-xware_黑科技——通过docker+xware在群辉DSM 6.0系统实现迅雷远程下载-Go语言中文社区...
  17. ps快捷键 拿走不谢*小Lemon送你们的
  18. QA:filter-自适应均衡器
  19. 徒手撸平台——基于Springboot+layui实现接口自动化平台
  20. Java基础学习笔记(十)——常用API(3)

热门文章

  1. Excel玩转统计图
  2. python连通图_用python实现无向图的连通性判断
  3. 【Android】RXAndroid
  4. 解决CentOS7 Development Tools 包不存在问题
  5. 按光在光纤中的传输模式可将光纤分为单模光纤和多模光纤两种
  6. 【Verilog】【Vivado】计数器示例
  7. pdf压缩大小,一个简单的pdf压缩方法
  8. 解决错误:IndentationError:expected an indented block
  9. seamless clone
  10. Springcloug入门