HttpRunner学习8--使用debugtalk.py辅助函数
前言
在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以借助 HttpRunner 中的辅助函数 debugtalk.py 来完成。
HttpRunner使用文档中的说明:
- HttpRunner 的实现方式为,支持热加载的插件机制(debugtalk.py),可以在 YAML/JSON 中调用 Python 函数。
- 具体地做法,我们可以在测试用例文件的同级或其父级目录中创建一个 debugtalk.py 文件,然后在其中定义相关的函数和变量。
本人环境:HttpRunner V1.5.8
测试场景
在之前的文章 HttpRunner学习3--extract提取数据和引用 中,我们模拟的是一个学生充值金币的接口,这个接口有权限验证,我们需要先通过接口A登录,然后在接口B中进行充值操作。
在这里,我们可以借助辅助函数,在 debugtalk.py 中写python代码实现登录,并返回后续cookie进行身份验证所需要的信息,最后直接在 YAML 用例脚本中进行引用。
通过Python代码登录获取Cookie
首先,创建一个Python文件,文件名为 debugtalk.py ,我们需要把一个登录函数的代码写到该文件中。在这里,登录函数将直接返回后续充值操作所需要的 cookie ,格式如下:用户名=登录接口返回的sign,debugtalk.py 文件内容如下:
import requests
base_url = "http://api.nnzhp.cn"
def get_cookie(username="test1010", passwd="aA123456"):
url = base_url + "/api/user/login"
headers = {
"Content-Type":"application/x-www-form-urlencoded",
"User-Agent": "Fiddler"
}
body = {
"username": username,
"passwd": passwd
}
res = requests.post(url, headers=headers, data=body)
try:
sign = res.json()["login_info"]["sign"]
except:
sign = ""
cookie = "{}={}".format(username, sign)
return cookie
if __name__ == '__main__':
cookie = get_cookie()
print(cookie)
上面的代码中,如果登录失败时,res.json()["login_info"]["sign"] 会提示错误 "KeyError" ,因此用 try...except 进行了简单的异常处理,当登录失败时,返回一个 "" 空字符串。
YAML文件中引用Cookie
在 debugtalk.py 中自定义函数返回数据后,我们要怎么去引用返回的数据呢?
先在 debugtalk.py 同一目录下创建 YAML/JSON 测试用例文件,如在YAML 测试用例中,对 debugtalk.py 中自定义的 get_cookie() 函数进行引用,可使用 ${get_cookie()} 。
Cookie: ${get_cookie()}
当然,也可以在引用的时候给函数传参数,如果参数是固定值,则可以这样写 ${get_cookie(test1010, aA123456)},如果参数是变量,则是 ${get_cookie($username, $passwd)} 等。
运行用例
完整的YAML格式用例如下:
- config:
name: debugtalk test
request:
base_url: http://api.nnzhp.cn
- test:
name: add gold
request:
url: api/user/gold_add
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
Cookie: ${get_cookie()}
data:
stu_id: 2114
gold: 500
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
- eq: [content.msg, "操作成功!"]
接下来便可以运行用例了,得到后的报告如下:
最新文章
- [goa]golang微服务框架学习(二)-- 代码自动生成
- 软件开发常用快捷键 &; 命令总结
- 用canvas画“哆啦A梦”时钟
- 【leetcode】Binary Tree Maximum Path Sum (medium)
- Windows Server 2008 R2 创建辅助DNS服务器并接管主要DNS服务器
- HTTP POST GET详解
- Spring+MyBatis多数据源配置实现
- 服务器bonding
- RF-BM-S02(V1.0)蓝牙4.0模块 使用手册
- 经验分享:CSS浮动(float,clear)通俗讲解 太棒了,清晰明了
- cocos2d-x 3.0 使用最新物理引擎的一个源代码实例
- IBM AIX Shell编写遭遇错误一2
- android KeyEvent for dot ";.";
- java获取mp3的时长和播放mp3文件
- git上传到github时犯的错误
- python访问互联网
- 26、jQuery
- HDU 5245 Joyful(期望)
- crontab 格式
- Windows搭建RobotFramework环境(一)
热门文章
- 12、pytest -- 缓存:记录执行的状态
- python字符串删除,列表删除以及字典删除的总结
- Scrapy中的反反爬、logging设置、Request参数及POST请求
- 2019牛客暑期多校训练营(第九场)Quadratic equation——二次剩余(模奇素数)
- 攻略前端面试官(一):JS的数据类型和内存机制浅析
- 《手把手教你》系列练习篇之6-python+ selenium自动化测试(详细教程)
- Chapter 07-Basic statistics(Part3 correlations)
- 计算机通过远程连接登录windows虚拟机具体配置流程
- 页面嵌套iframe的时候引发的js交互问题
- OCR文字识别在计算机视觉的重要性、基本技术和最新进展