httprunner 2.x学习15
Posted 上海-悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httprunner 2.x学习15相关的知识,希望对你有一定的参考价值。
前言
requests 发送请求返回的 html 页面,默认是按 "ISO-8859-1" 编码解码,经常会出现返回的 html 出现乱码的情况。
httprunner 3.x可以在debugtalk.py 写个hook函数解码返回的html内容
response 解码
requests 直接请求页面,返回的html里面有乱码
import requests
url = "https://home.cnblogs.com/u/yoyoketang/"
r = requests.get(url)
print(r.encoding)
print(r.text)
运行结果
ISO-8859-1
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>
<title>å客å</title>
<base href="/"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="icon" type="image/x-icon" href="//common.cnblogs.com/favicon.ico"/>
<meta name="description" content="å客åæ¯ä¸ä¸ªé¢åå¼åè
çç¥è¯å享社åºã"/>
<meta name="og:description" content="å客åæ¯ä¸ä¸ªé¢åå¼åè
çç¥è¯å享社åºã"/>
<link rel="stylesheet" href="styles.18055be4eba6aa87ad55.css"></head>
解决办法可以指定 response 的解码格式
import requests
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
url = "https://home.cnblogs.com/u/yoyoketang/"
r = requests.get(url)
r.encoding = "utf-8" # 解码方式
print(r.encoding)
print(r.text)
于是就能看到正常的html内容了
utf-8
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>
<title>博客园</title>
<base href="/"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="icon" type="image/x-icon" href="//common.cnblogs.com/favicon.ico"/>
<meta name="description" content="博客园是一个面向开发者的知识分享社区。"/>
<meta name="og:description" content="博客园是一个面向开发者的知识分享社区。"/>
hrun 2.x问题描述
在httprunner2.x 中看到正则表达式没法提取乱码
FAIL: test_0000_000 (httprunner.api.TestSequense)
test demo case1
----------------------------------------------------------------------
Traceback (most recent call last):
File "e:\\python36\\lib\\site-packages\\httprunner\\api.py", line 63, in test
test_runner.run_test(test_dict)
httprunner.exceptions.ValidationFailure:
validate: <title>(.+?)</title> regex_match 上海-悠悠 - 博客园(str) ==> fail
å客å(str) regex_match 上海-悠悠 - 博客园(str)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "e:\\python36\\lib\\site-packages\\httprunner\\api.py", line 65, in test
self.fail(str(ex))
AssertionError:
validate: <title>(.+?)</title> regex_match 上海-悠悠 - 博客园(str) ==> fail
å客å(str) regex_match 上海-悠悠 - 博客园(str)
teardown_hook解码
在debugtalk.py 中写一个hook函数解码返回的response内容
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
def response_decode(response):
"""解码返回的html内容"""
print(response)
print(response.resp_obj) # requests.response
response.resp_obj.encoding = "utf-8"
response.resp_obj
就是 requests 库的 response 对象
yaml脚本如下
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: yoyoketang
teststeps:
-
name: yoyoketang
request:
url: https://home.cnblogs.com/u/yoyoketang/
method: GET
headers:
User-Agent: Fiddler
Content-Type: application/json
verify: false
teardown_hooks:
- ${response_decode($response)}
validate:
- eq: [status_code, 200]
- eq: [\'<title>(.+?)</title>\', 博客园]
以上是关于httprunner 2.x学习15的主要内容,如果未能解决你的问题,请参考以下文章
httprunner 2.x学习16 - 调用HttpRunner类执行用例
httprunner 2.x学习14-jsonpath提取(解决:ResponseObject does not have attribute: parsed_body)
httprunner 2.x学习10-上传文件(upload关键字使用)
httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,只会解析到第一个项目的debugtalk.py