HttpRunner的debugtalk使用及参数化驱动

Debugtalk的使用场景及特点

  • 在做接口的时候会有功能无法实现,就需要开发对应功能
  • 创建简单功能实现系统需要完成的功能操作
  • 将全局变量或者自定义变量放在里面
来源网路.png

使用debugtalk内置函数

  • 内置函数sleep
import time

def sleep(n_secs):
    time.sleep(n_secs)
  • 在login请求中添加等待时间,使用sleep方法
    直接使用debugtalk里面的函数,不需要在需要的yaml文件中引用,因为每次执行前会自动到debugtalk文件中搜索对应函数
    request:
        headers:
            Sec-Fetch-Dest: document
            Sec-Fetch-Mode: navigate
            Sec-Fetch-Site: none
            Sec-Fetch-User: ?1
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
        method: GET
        url: https://mubu.com/
    teardown_hooks:
        - ${sleep(5)}
测试报告.png

debugtalk创建函数并使用

  • 创建一个函数,生成随机数
def get_timestamp():
    return str(int(time.time()*1000))
  • 在编辑title的请求中添加一个时间随机数
    variables: 
        documentId: 28nRA1U6DVz
        memberId: "1576021112575"
        userId: "3878131"
        new_title: "New_title_Sam${get_timestamp()}"
            data:
                message:
                    content:
                    -   name: nameChanged
                        original: test123
                        title: ${new_title}
                    documentId: ${documentId}
                    type: CHANGE
                    version: 3
                    viewType: OUTLINE
  • 执行以后就能在title的后面生成一个以日期字符串的随机数
hrun testcases/change_title.yml
报告样式.png
网站样式.png

创建一个函数打印请求参数值

  • 创建打印函数
def print_parameter(doc_id):
    print("the paramter is: {}".format(doc_id))
  • 在请求中使用
    request:
        headers:
            Sec-Fetch-Dest: document
            Sec-Fetch-Mode: navigate
            Sec-Fetch-Site: same-origin
            Sec-Fetch-User: ?1
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
                (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
        method: GET
        url: https://mubu.com/doc${documentId}
    setup_hooks:
        - ${print_parameter($documentId)}
    extract:
        memberId: "memberId: '(.*)'"
  • 执行请求并显示结果
hrun testcases/create_doc.yml
log.png

debugtalk使用总结:

可以实现如下的功能
1.数据初始化
2.数据库连接
3.函数的创建

使用环境变量ENV保存参数

官方文档介绍
https://cn.httprunner.org/prepare/dot-env/

-`将常用的参数比如环境信息放在ENV文件中

USERNAME=**
PASSWORD=**
image.png
  • 在请求体的前面创建参数并引用环境变量值
    这里使用ENV关键字表示参数是从ENV文件夹的环境变量中取值
config:
    name: testcase login the mubu
    variables: 
        password: ${ENV(PASSWORD)}
        phone: ${ENV(USERNAME)}
    verify: False
  • 将我们使用的参数进行替换
-   name: /api/login/submit
    request:
        data:
            password: ${password}
            phone: ${phone}
  • 执行并查看结果是生效的
 hrun testcases/login.yml
log.png
测试报告.png
报告详情.png

参数化的实现

官方文档的介绍
1.官方介绍使用3中形式
2.第1种是直接将参数按照集合形式写出来,这种主要用于参数少,使用参数比较容易修改
3.第2种是将参数写到csv文件中,按照字典形式存放
4.第3种是通过函数的形式,不固定的参数通过函数计算实现,比如时间形式,随机数形式等
https://cn.httprunner.org/prepare/parameters/

  • 示例如果我们有多组的用户登录,就需要将测试的时候参数化
  • 下面会将所有的参数放进csv文件中进行保存
  • 数据从csv文件中读取并发送请求

创建csv文件

  • 在根目录创建一个文件夹data存放csv
  • 创建csv文件


    image.png

添加账户信息

  • 添加是按照key,value形式创建
  • 数据由逗号(,)分隔
屏幕截图.png

在testsuites创建用例集

image.png

创建suite脚本信息

  • config信息主要描述用例集信息
  • testcases下面可以创建多个用例集合,每个测试用例-分隔
  • testcase标记需要执行的测试用例名称,这里login.yml
  • parameters下面就是包含的测试数量实现方式,这里使用的是读取csv文件
  • 格式是需要大写字母P,然后圆括号(),包含csv文件的相对路径
  • 重点是参数名:phone-password这2个参数是需要跟csv文件表头一致,顺序也需要一致。然后每个参数
    中间是使用中杠(-)进行分隔。比如csv文件中是按照phone,password的表头,那这里就按照phone-
    password的形式表示
config:
    name: login with different user
    verify: False

testcases:
-
    name: login system wit user
    testcase: testcases/login.yml
    parameters:
        phone-password: ${P(data/account.csv)}

执行test suite的脚本

hrun testsuites/login_multipulte_user.yml

查看报告

  • 报告中会显示多个登陆信息


    报告截图.png
  • 查看失败报告详细信息


    报告详情.png
  • 因为2组登陆的信息是含有1组错误的账号密码,所以会有错误的内容。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。