M01_cookie整理:提取指定某个名称的 cookie 值
在 HTTP 响应中,通过响应头设置 cookies 记录用户信息以及身份凭证。用 HttpRunner 编写测试用例的时候,模拟用户身份就需要从中提取 cookies 信息。
实现 cookies 提取有多种方式,如:
- 通过 cookies 关键字提取全部 cookies;
- 通过 cookies.xxxxx 获取某个名称的 cookie 值
- 通过 headers.Set-Cookie 提取全部 cookies;
- 通过 headers.Set-Cookie.xxxxx 获取某个名称的 cookie 值;
1. 提取指定名称的 Cookie 值
登录系统后打开用户管理页面,抓包分析如下:
- 请求地址:http://localhost/myweb/jxc/system/user.asp
- 请求方法:GET
在请求头中附加了cookie信息,存储的是 SessionID 的值,此 cookie 是在第一次访问系统时服务器返回的。
首先不附加 cookie,编写测试用例:
- config:
name: 员工管理
- test:
name: 测试步骤 - 打开员工管理页面
request:
url: http://localhost/myweb/jxc/system/user.asp
method: GET
extract:
# 提取HTML中文本,用于验证
# 响应实体中包括文本: ....<form name="form1" action="user_del.asp">....
- p_info: action="(.*)">
validata:
- eq: [status_code, 200]
- eq: [$p_info, user_del.asp]
执行以上测试用例,显示失败。
显示用例中提取(extract)数据失败。继续往下看,发现返回的响应实体内容不是我们预期的内容,说明以上用例打开“员工管理”页面失败。
失败原因比较容易分析,我们没有经过登录操作,试图直接访问系统内部页面,肯定是不允许的。那么这里的关键就是此用例中没有证明已经登录成功这件事儿。前面抓包中的 cookie 那行数据,其实就是代表登录成功与否的关键。
所以我们应该从登录的响应信息中获取 cookie,再把此 cookie 附加到打开“员工管理”的测试用例中。
先看看如何提取一个指定名称的 cookie 吧。
格式:
extract:
- <变量名称>: cookies.<指定的 cookie 名称>
举例:
extract:
- sessionid: cookies.ASPSESSIONIDQQBASCAA
在后续请求中使用该 cookie 方法:
格式:
request:
headers:
cookie:<指定的 cookie 名称>=<提取的cookie变量名称>
举例:
request:
url: http://localhost/myweb/jxc/system/danwei.asp
headers:
cookie: ASPSESSIONIDQQBASCAA=$sessionid
本次实验我们将编写两个独立的用例文件,实验过程如下:
- 编写登录测试用例,并提取 cookie 值,文件名:login.yml
- 编写打开“员工管理页面”用例,文件名:user.yml
- 步骤1:调用登录用例,获取cookie并输出
- 步骤2:附加以上cookie 值,打开员工管理页面
1. 编写登录测试用例,并提取 cookie 值,文件名:login.yml
- config:
name: 登录操作
- test:
name: 测试步骤 - 进行登录操作
request:
url: http://localhost/myweb/jxc/index.asp?action=login
method: POST
data:
username: admin
pwd: admin
allow_redirects: FALSE
extract:
# 此处提取 cookie,即 SessionID 信息
- p_sid: cookies.ASPSESSIONIDQQBASCAA
# 提取HTML中文本,用于验证
# 原始文本为: ....<a HREF="main.asp">.....
- p_info: HREF="(.*)">
validata:
- eq: [status_code, 302]
- eq: [$p_info, main.asp]
2. 编写打开“员工管理页面”用例,附加以上cookie 值,文件名:user.yml
- config:
name: 员工管理
- test:
name: 测试步骤 - 调用登录测试用例
testcase: login.yml
# 输出提取的 cookie 值
output: [p_sid]
- test:
name: 测试步骤 - 打开员工管理页面
request:
url: http://localhost/myweb/jxc/system/user.asp
method: GET
headers:
# 附加前面用例提供的 cookie 值
cookie: ASPSESSIONIDQQBASCAA=$p_sid
extract:
# 提取HTML中文本,用于验证
# 原始文本为: ....<form name="form1" action="user_del.asp">....
- p_info: action="(.*)">
validata:
- eq: [status_code, 200]
- eq: [$p_info, user_del.asp]
执行该用例: