前言

在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中进行充值操作。

学生金币充值接口:http://doc.nnzhp.cn/index.php?s=/6&page_id=11

在这里,我们可以借助辅助函数,在 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, "操作成功!"]

接下来便可以运行用例了,得到后的报告如下:

最新文章

  1. [goa]golang微服务框架学习(二)-- 代码自动生成
  2. 软件开发常用快捷键 & 命令总结
  3. 用canvas画“哆啦A梦”时钟
  4. 【leetcode】Binary Tree Maximum Path Sum (medium)
  5. Windows Server 2008 R2 创建辅助DNS服务器并接管主要DNS服务器
  6. HTTP POST GET详解
  7. Spring+MyBatis多数据源配置实现
  8. 服务器bonding
  9. RF-BM-S02(V1.0)蓝牙4.0模块 使用手册
  10. 经验分享:CSS浮动(float,clear)通俗讲解 太棒了,清晰明了
  11. cocos2d-x 3.0 使用最新物理引擎的一个源代码实例
  12. IBM AIX Shell编写遭遇错误一2
  13. android KeyEvent for dot "."
  14. java获取mp3的时长和播放mp3文件
  15. git上传到github时犯的错误
  16. python访问互联网
  17. 26、jQuery
  18. HDU 5245 Joyful(期望)
  19. crontab 格式
  20. Windows搭建RobotFramework环境(一)

热门文章

  1. 12、pytest -- 缓存:记录执行的状态
  2. python字符串删除,列表删除以及字典删除的总结
  3. Scrapy中的反反爬、logging设置、Request参数及POST请求
  4. 2019牛客暑期多校训练营(第九场)Quadratic equation——二次剩余(模奇素数)
  5. 攻略前端面试官(一):JS的数据类型和内存机制浅析
  6. 《手把手教你》系列练习篇之6-python+ selenium自动化测试(详细教程)
  7. Chapter 07-Basic statistics(Part3 correlations)
  8. 计算机通过远程连接登录windows虚拟机具体配置流程
  9. 页面嵌套iframe的时候引发的js交互问题
  10. OCR文字识别在计算机视觉的重要性、基本技术和最新进展