测试项目简介:
待测系统:http://hmshop-test.itheima.net/ (黑马培训的测试系统,供学习使用)
登录账号密码:13800000001/123456,验证码固定为8888
测试环境:pytest + requests + allure
- 用例设计
- 用户登录(使用正确用户名密码)
- 往购物车添加商品
- 查询购物车
- 修改购物车商品数量
- 删除购物车商品
- 提交订单
- 查询订单
- 取消订单
- 使用fiddler获取接口信息
- 用户登录(使用正确用户名密码):
因为在登录前,需要更新验证码,以获取Cookies,在登录时提交给服务器验证,否则会提示:“验证码错误”。所以用户登录用例中,需要使用requests请求两次,分别是:更新验证码和登录。
更新验证码:
- 打开登录首页:http://hmshop-test.itheima.net/Home/user/login.html
- 打开fiddler(最好设置下过滤器,只抓购物商城的包)
- 点击验证码后抓包如下:
提取url: http://hmshop-test.itheima.net/index.php?m=Home&c=User&a=verify (参数r去掉后于结果无影响)
提取请求方式:GET
提取响应信息:从上图中得知,返回的是一张图片,即验证码图片,于结果无用,只需提取响应信息中的Cookie信息即可。
用户登录:
- 登录首页中输入用户名密码:13800000001/123456,验证码8888,点击登录
- 2. fiddler抓包如下:
-
提取url:http://hmshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数:username=13800000001&password=123456&verify_code=8888
提取响应信息:类型为json格式,内容较长,只需要知道 status字段值即可,用于后续代码判断是否请求操作是否成功。
- 2. 往购物车添加商品
- a) 登录后浏览商品,选择一款商品点击“加入购物车”
- b) fiddler抓包查看
-
提取url:http://hmshop-test.itheima.net/index.php?m=Home&c=Cart&a=add
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数:参数内容过长,这里不便展示,可自行抓包参考。
提取响应信息:类型为json格式,status值为1.
-
3. 修改购物车商品数量
a) 进入购物车展示页面
b) 选择一款商品,点击数量中的+号或者直接输入数字
c) fiddler抓包查看
-
提取url: http://hmshop-test.itheima.net/Home/Cart/changeNum.html
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数:cart%5Bid%5D=154795&cart%5Bgoods_num%5D=5&cart%5Bselected%5D=1
提取响应信息:类型为json格式,status值为1
- a) 登录后浏览商品,选择一款商品点击“加入购物车”
-
4. 查询购物车
a)刷新购物车首页
b) fiddler抓包查看
提取url: http://hmshop-test.itheima.net/Home/Cart/index.html
提取请求方式:GET
提取响应信息:返回的是一个html页面,注意要提取页面中data-cart-id的内容,用于删除购物车商品时作为参数传递给服务器。
5. 删除购物车商品
a)在购物车首页商品列表的操作一栏中,点击删除
b) fiddler抓包查看
提取url:http://hmshop-test.itheima.net/Home/Cart/delete.html
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数:cart_ids%5B%5D=154795
提取响应信息:类型为json格式,status值为1
6. 提交订单
a)添加商品到购物车后,点击“去结算”
b) 进入订单详情页面后,点击“提交订单”
b) fiddler抓包查看
提取url:http://hmshop-test.itheima.net/Home/Cart/cart3.html
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数内容:内容过长,不便展示。
提取响应信息:类型为json格式,status值为1,result为订单号,需要提取,以供查询订单时作为参数传递
7. 查询订单
a)提交订单后,页面自动跳转到订单待支付页面
b) fiddler抓包查看
提取url:http://hmshop-test.itheima.net/index.php?m=Home&c=Cart&a=cart4&order_sn=订单号
提取请求类型:GET
提取请求参数:订单号,从提交订单的接口响应信息中获取
提取响应信息:类型是html页面,需要提取订单详情中的数字,如上图中的2300。
8. 取消订单
a)在订单待支付页面中点击“订单详情”(或在我的订单中点击对应订单的“订单详情”)
b) 点击“取消订单”
c) fiddler抓包查看
提取url:http://hmshop-test.itheima.net/index.php/Home/Order/cancel_order.html
提取请求方式:POST
提取请求参数类型:Content-Type: application/x-www-form-urlencoded;
提取请求参数:id=2300
提取响应信息:类型为json格式,status值为1
- 测试用例编写
根据fiddler抓包内容,用例编写如下:
- 代码编写
- 代码环境及插件信息
代码语言 | Python |
平台 | PyCharm |
http请求工具插件 | Requests |
测试用例管理插件 | Pytest |
报告生成插件 | Allure-pytest |
2. 测试框架设计
api 层:存放测试程序中共用的方法
common层:用于存放公共变量,方便程序读取。
data层:存放测试用例参数化数据,比如用户登录信息,商品信息等
log层:存放测试程序执行过程中产生的日志信息。
report层:存放测试程序的报告信息。
testcase层:接口自动化测试用例脚本。
tools层:存放测试程序所用到的工具类。
3. 各层代码解释
common层:该层主要用作读取接口自动化测试中所需要的文件路径,以及自动化测试中会存储的变量,比如Cookie,订单号等。代码如下:
data层:该层存放自动化测试中会使用的各类数据,简介如下:
user.json 存放用户登录账号密码以及验证码,格式为json
goods.txt 存放商品相关数据,在添加商品到购物车时作为参数传递,原本格式应该是json,因为是直接从fiddler复制下来的,内容太多,手工修改很容易出错, 所以在tools层写了相关的数据读取工具将文本数据转化为json格式的内容。
orderlist.txt 存放提交订单时所需要的数据,作为参数传递,原本格式为json,也是从fiddler复制下来,后续使用工具转化为json格式。
tools层:其下有logUtils模块和readData模块。
readData模块实现功能如下:
a) read_json: 该函数读取json格式的文件,本测试项目只在读取用户登录账号密码时会用到该函数。
b) read_txt_file:该函数读取txt文档,本测试项目中添加商品到购物车的文件中会有两条数据,而txt文档换行会有换行符,需要剔除。
c) str_to_dict:该函数将字符串列表转换为字典列表,并返回字典列表
d) read_data:该函数将txt文档转换为字典列表,并返回字典列表,会调用read_txt_file和str_to_dict两个函数。
logUtils实现功能如下:
- 定义了日志格式、日志级别、日志展示内容等
- 向外提供logger日志对象,其他程序可直接调用
- 日志文件按天进行切割
report层:该层存放测试运行时生成的各种数据,用于后续生成报告
log层:存放程序运行时产生的日志信息。
api层:封装requests请求方法,并对响应信息做基本判断。
testcase层:该层用于存放接口自动化测试脚本,按照测试用例顺序编写。
- 测试用例前置和后置函数,用于记录测试开始和结束时间
- test_login:该函数用于请求用户登录,用户数据通过pytest.mark.parametrize修饰器传入,后续参数化均使用该修饰器。
通过前面的分析,得知响应信息为json数据时,均有status字段,且成功时status字段值均为1,所以将该字段用于判断请求是否成功。
- 添加商品到购物车
- 查询购物车
- 响应信息是html格式,需要从html文档中提取商品所在购物车中的data-cart-id值,并存放在公共变量中。
- 因添加了两个商品,所以判断中添加购物车商品数量数值是否不小于2。
- 修改购物车商品数量:只修改第一个商品的数量。
- 删除购物车中的商品:只删除第一个商品,留下一个商品提交订单
- 提交订单
- 查询订单
- 该接口返回html文档,需要通过正则表达式匹配订单详情号,用于取消订单时作为参数传递给服务器。
- 取消订单
- 测试执行
- pytest.ini配置
- 固定文件,需手动创建在项目根目录下
- 用于读取整个项目的配置信息
- pytest按此配置文件指定方式运行
- 运行步骤
- 进入testcase目录下,打开cmd
- 输入pytest --alluredir=../report 执行测试
- 输入allure serve ../report,生成测试报告