HttpRunner–初始化与清除机制

在HttpRunner3.x中实现初始化与清除机制的方式是采用hook 机制,可以在请求前和请求后调用钩子函数。

步骤层面

钩子函数用法

1.定义钩子函数

debugtalk.py

def hook_setup():
    with open('setup.txt','w',encoding='utf-8') as f:
        f.write('执行初始化')
def hook_teardown():
    with open('teardown.txt', 'w', encoding='utf-8') as f:
        f.write('执行清除')

hook_setuphook_teardown两个函数的作用是,在执行函数的时候,将文字写入到文件中

2.测试步骤引用钩子函数

demo_login.yml

config:
    name: 测试用例
    base_url: http://127.0.0.1:8080
    variables: ${login_variables()}


teststeps:
    - name: 用户名密码登录
      setup_hooks:
          - ${hook_setup()}
      teardown_hooks:
          - ${hook_teardown()}
      request:
          method: POST
          url: /api/mgr/loginReq
          headers:
              Content-Type: "application/x-www-form-urlencoded; charset=UTF-8"
          cookies:
              csrftoken: 1esSz9MFIZRpjAmZrvVLrL9NdiXbNpXU
          data:
              username: $user  #引用变量 也可以写成${变量名}
              password: $psw
      validate:
          - eq:
              - status_code
              - 200
          - eq:
              - body.retcode
              - $code

输入hrun命令执行测试用例 hrun .\testcases\demo_login.yml

通过查看日志文件可以发现,调用request请求前,执行了hook_setup函数,返回response结果后,执行了hook_teardown函数。在项目目录下,生成了setup.txtteardown.txt两个文件并写入了文字内容

实战案例
提取cookie信息

进行接口进行测试,大多接口都会需要带上登录成功后的cookie信息

login.yml

config:
    name: 测试用例
    base_url: http://127.0.0.1:8080
    variables:
        username: auto
        password: sdfsdfsdf
    export: # 将测试步骤中提取的变量cookie分享出去
        - cookie


teststeps:
    - name: 用户名密码登录
      request:
          method: POST
          url: /api/mgr/loginReq
          headers:
              Content-Type: "application/x-www-form-urlencoded; charset=UTF-8"
          cookies:
              csrftoken: 1esSz9MFIZRpjAmZrvVLrL9NdiXbNpXU
          data:
              username: $username  #引用变量 也可以写成${变量名}
              password: $password
          extract: #提取当前步骤变量
              cookie: cookies.sessionid
      validate:
          - eq:
              - status_code
              - 200
          - eq:
              - body.retcode
              - 0

通过extract,提取登录成功后cookies里的sessionid,并将其赋予变量cookie,再通过export将测试步骤中提取的变量cookie分享出去

add_course.yml

config:
    name: 添加课程
    verify: false
    base_url: http://127.0.0.1:8080
    export:     # 将login.yml里提取的cookie变量和add_course.yml里提取的course_id分享出去
        - course_id
        - cookie


teststeps:
    - name: 登录-引用login.yml
      testcase: testcases/login.yml      #引用login.yml测试用例文件

    - name: 添加课程
      request:
          method: POST
          url: /api/mgr/sq_mgr/
          headers:
              Content-Type: "application/x-www-form-urlencoded"
          cookies:
              sessionid: ${cookie} # 将login.yml里提取的cookie变量引入
          data:
              action: add_course
              data: '{ "name": "高中化学", "desc": "高中化学课程", "display_idx": "1"}'
      extract:
          course_id: body.id
      validate:
          - eq: [ 'status_code',200, ]
          - eq: [ 'body.retcode',0 ]


输入hrun命令执行测试用例 hrun .\testcases\add_course.yml

通过日志文件可以发现,添加课程用例中,将login.yml里提取的cookie变量引入,执行sq_mgr接口成功,返回body中返回了课程id。同样的方法,通过extract,提取添加课程接口中body里的id,并将其赋予变量course_id,再通过export将测试步骤中提取的变量course_id分享出去

通过钩子函数清理数据

debugtalk.py

def delete_course(_id, sessionid):
    url = 'http://http://127.0.0.1:8080/api/mgr/sq_mgr/'
    payload = {
        "action": "delete_course",
        "id": _id
    }
    cookies = {
        'sessionid': sessionid
    }
    resp = requests.delete(url, data=payload, cookies=cookies)
    return resp.json()

update_course.yml

config:
    name: 修改课程
    verify: false
    base_url: http://127.0.0.1:8080
    export:
        - course_id
        - cookie


teststeps:
    - name: 添加课程
      testcase: testcases/add_course.yml     #引用add_course.yml测试用例文件

    - name: 修改课程
      request:
          method: PUT
          url: /api/mgr/sq_mgr/
          headers:
              Content-Type: "application/x-www-form-urlencoded"
          cookies:
              sessionid: ${cookie} # 将login.yml里提取的cookie变量引入
          data:
              action: modify_course
              id: ${course_id}  # 将add_course.yml里提取的course_id变量引入
              newdata: '{ "name": "初中计算机", "desc": "初中计算机课程", "display_idx": "1"}'
      validate:
          - eq:
              - status_code
              - 200
          - eq:
              - body.retcode
              - 0
      teardown_hooks:       # 使用钩子函数清理数据
          - ${delete_course($course_id,$cookie)}

输入hrun命令执行测试用例 hrun .\testcases\update_course.yml

通过日志文件可以发现,修改课程用例中,将add_course.yml里提取的cookiecourse_id变量引入,执行sq_mgr接口成功,修改了课程信息。最后,使用钩子函数调用debugtalk.py里的delete_course函数清理数据,将课程信息删除

用例层面

HttpRunner3.x技术层面未支持用例hook,但可以通过变通的方式实现初始化与清除

比如将初始化清除的步骤写进测试用例,在测试步骤中引用测试用例即可

初始化用例文件 setup.yml

config:
    name: 初始化
    base_url: http://127.0.0.1:8080
    export: # 将测试步骤中提取的变量cookie分享出去
        - cookie


teststeps:
    - name: 用户名密码登录
      request:
          method: POST
          url: /api/mgr/loginReq
          headers:
              Content-Type: "application/x-www-form-urlencoded; charset=UTF-8"
          cookies:
              csrftoken: 1esSz9MFIZRpjAmZrvVLrL9NdiXbNpXU
          data:
              username: auto
              password: sdfsdfsdf
      extract: #提取当前步骤变量
          cookie: cookies.sessionid
      validate:
          - eq:
              - status_code
              - 200
          - eq:
              - body.retcode
              - 0

清除用例文件 teardown.yml

config:
    name: 清除
    base_url: http://127.0.0.1:8080


teststeps:
    - name: 退出登录
      request:
          method: GET
          url: /api/mgr/logoutreq
      validate:
          - eq:
              - status_code
              - 200
          - eq:
              - body.retcode
              - 0

测试用例部分 demo.yml

config:
    name: 列出课程
    verify: false
    base_url: http://127.0.0.1:8080


teststeps:
    - name: 初始化
      testcase: testcases/setup.yml      #引用初始化测试用例文件

    - name: 列出课程
      request:
          method: GET
          url: /api/mgr/sq_mgr/
          headers:
              Content-Type: "application/x-www-form-urlencoded"
          cookies:
              sessionid: ${cookie} # 将setup.yml里提取的cookie变量引入
          params:
              action: list_course
              pagenum: 1
              pagesize: 20
      extract:
          course_id: body.retlist[0].id   # 提取课程id
      validate:
          - eq: [ 'status_code',200, ]
          - eq: [ 'body.retcode',0 ]

    - name: 清除
      testcase: testcases/teardown.yml      #引用清除测试用例文件


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值