- 测试流程
测试流程
- 功能测试流程
功能测试流程
- 需求评审
- 制定测试计划
- 编写测试用例和评审
- 用例执行
- 缺陷管理
- 测试报告
- 接口测试流程
接口测试流程
- 需求评审
- 制定测试计划
- 分析api文档
- 编写测试用例
- 搭建测试环境
- 编写脚本
- 执行脚本
- 缺陷管理
- 测试报告
-
测试步骤
测试步骤
-
需求评审
需求评审
前置:阅读需求
- 正常情况下阅读所有需求—测试主管
- 涉及到本项目测试人员全部参与
目标:
- 熟悉项目功能
- 站在不同角度对需求进行查漏补缺
- 各部门对需求理解一致【重要】
评审人员:测试、开发、产品
- 测试计划
测试计划
核心:
- 测什么(测试目标、测试范围)
- 谁来测(人员安排)
- 怎么测(测试策略、测试方法)
其他:- 提测标准
- 上线标准
- ⻛险控制
- 接口相关理论
- ui功能测试和接口测试哪个先执行?–为什么
结论:
- 接口测试先执行
原因:
- ui功能测试需要等待前端页面开发完成、后台接口开发完后且前端与后端联调完成。
- ui功能测试与接口测试的区别?
ui功能:功能调用(前端jS、服务器端)+页面布局+兼容
接口测试:完整的测试服务端功能验证。
- ui功能测试和接口测试哪个更高效?–为什么
结论:接口测试更高
原因:接口测试只测服务端功能以及没有多页面操作因素。
-
金融项目
金融项目
-
测试对象
测试对象: 投资业务接口
- 待测接口
待测接口
1、注册登录
- 注册图片验证码接口
- 注册手机验证码接口
- 注册接口
- 登录接口
- 查询登录状态接口
2、认证开户充值
- 认证接口
- 查询认证状态
- 请求后台开户接口
- 三方开户接口
- 请求充值验证码接口
- 请求后台充值接口
- 请求三方充值接口
3、投资
- 请求后台投资接口
- 三方投资接口
4、投资业务
- 注册图片验证码接口
- 注册手机验证码接口
- 注册接口
- 登录接口
- 认证接口
- 请求后台开户接口
- 三方开户接口
- 请求充值验证码接口
- 请求后台充值接口
- 请求三方充值接口
- 请求后台投资接口
- 三方投资接口
- 接口如何测试?
设计用例
设计用例
使用工具
- 可视化工具:postman、Jmeter
- 代码:python+requests+unittest
- 接口流程
- 需求评审
- 制定测试计划与方案
- 分析API文档
- 编写用例
- 搭建环境(项目环境、项目工具环境)
- 编写脚本
- 执行脚本
- 缺陷管理
- 测试报告
需求评审
参与人员:产品、开发、测试
目的:
- 熟悉项目有哪些动能
- 各角色对需求的理解一致
- 站在不同角度对需求进行 查漏补缺
测试计划和方案
核心:
- 测什么(测试目标、测试范围)
- 谁来测(人员安排)
- 怎么测(测试策略、测试方法)
其他:
- 提测标准
- 上线标准
- ⻛险控制
分析API文档
- 测试接口依赖的数据是否都明确(请求、响应)
- 分析接口之间依赖关系及关联
- 参数规则(数据类型、必填、数据长度限制、非空、敏感信息是否加密等等)说明
项目难点:
- 1、认证接口请求头使用
multipart/form-data
- 2、三方开户、三方充值、三方投资都需要调用Mock接口
- 请求url:来源响应数据action的值
- 请求参数和值:所有input标签中name属性值为参数名,value属性值为参数值。
测试点提取
测试点提取
- 注册图片验证码、注册验证码
-
注册接口
登录
开通账号
充值
投资
测试用例
测试用例
-
注册图片验证码、注册短信验证码
-
注册
-
登录
-
认证开户
-
充值
-
投资
-
投资业务
-
环境说明
1、项目环境
2、测试工具环境
- 项目环境搭建
项目环境搭建
- 环境部署主要步骤
- 三方接口如何解决?
三方接口如何解决
使用mock
Mock说明
- 什么是mock?
–模拟接口
- 什么场景下会用mock?
- 1、依赖的接口未实现
- 2、依赖的接口响应速度慢
- 3、针对接口模拟各种异常
如何去实现?
1、使用
mock现有工具
–>moco
2、自定义mock
- ①编写
一个函数 直接return 模拟的值
- ② 使用
接口开发框架
编写要模拟的接口 flask
要模拟哪些内容?
- 响应数据
- 响应状态码
需求场景:
模拟一个:登录接口
- 1、在API文档中说明如果登录成功,返回:状态码{“status”:200,“msg”:“登录成功!”, “token”:“xxx123123123”}
- 2、登录失败反馈:状态码:200{“status”:100,“msg”:“用户名或密码错误!”}
问题:开发还未实现登录接口,那么依赖登录如何解决?
实现
from flask import Flask
app = Flask(__name__)
# 定义接口 模拟返回结果
@app.route("/login", methods=["post"])
def login():return {"status": 200, "msg": "登录成功!", "token": "xxxx123123123"}
# 定义接口 模拟异常响应状态码
@app.route("/login/lgy", methods=["get"])
def lgy():return "haha",407,"xiaoxi"
# 运行
app.run()
扩展
from flask import Flask,requests
app = Flask(__name__)"""
需求:用户名为admin 密码为:123456 返回登录成功!否则返回用户名或密码错误,请求参数格式为:form"""# 定义接口 模拟返回结果
@app.route("/login", methods=["post"])
def login():#提取数据username=requests.form.get("username")pwd=requests.form.get("possword")#判断if username=="admin" and pwd=="123456":return {"status": 200, "msg": "登录成功!", "token": "xxxx123123123"}else:return {"status":100,"msg":"用户名或密码错误!"}
# 运行
app.run()
- 构造测试数据
构造测试数据
方式
- 通过系统页面构造
- 通过接口构造
- 通过数据库构造
- 通过系统页面构造
- 优点:可视化页面操作
- 缺点:操作步骤较多,不适合频繁改造数据
- 示例:参考发布借款标流程
- 通过接口构造
- 优点:速度快
- 缺点:接口耦合度高(接口之间依赖性强,一个失败,后面全失败)
- 建议:适合依赖3个以内接口就行构造
- 通过数据库构造(推荐)
- 优点:灵活度大,执行速度最快
- 缺点:需要熟悉库、表、字段
- 建议:编写SQL语句时,使用复制生成的SQL语句,修改主要字段值。
- 构造借款业务数据
-- 清空操作
delete from `czbk_member`.`mb_member` where id=869;
delete from `czbk_member`.`mb_member_info` where id=987;
delete from `czbk_finance`.`fn_loan_amount` where id=987;
delete from `p2p_mock`.`p2p_account` where id=911;-- 借款
delete from `czbk_finance`.`fn_loan` where id=642;
delete from `czbk_finance`.`fn_loan_info` where id=832;
delete from `czbk_finance`.`fn_loan_amount_log` where id=869;
INSERT INTO `czbk_member`.`mb_member` (`id`, `name`, `trust_account`, `password`,
`email`, `phone`, `paypassword`, `count`, `register_ip`, `register_time`,
`register_date`, `lastlogin_ip`, `lastlogin_time`, `lastlogin_date`,
`register_type`, `role`, `group`, `group_status`, `is_realname`, `is_email`,
`is_phone`, `is_video`, `is_id5`, `is_vip`, `credit_point`, `is_auto`,
`pwd_attach`, `status`, `lock_time`, `vip_start_time`, `vip_end_time`,
`vip_category_id`, `vip_category_ind`, `amount`, `phonestr`) VALUES ('869',
'13099775533', '6021234507160403', 'eab70f4a46c640b3dfc35040bf37c803', NULL,
'13099775533', NULL, '1', '1972826569', '1588835827', '2020-05-07', '1972826569',
'1588835827', '2020-05-07', '1', '1', '1', '2', '1', '-1', '1', '-1', '-1', '-1',
'0', '-1', '1m4U82PqPx', '1', NULL, NULL, NULL, NULL, NULL, '0.00', NULL);
INSERT INTO `czbk_member`.`mb_member_info` (`id`, `member_id`, `member_name`,
`avatar`, `nickname`, `realname`, `gender`, `birthday`, `card_id`, `qq`,
`educational_background`, `marry_status`, `graduated`, `company_industry`,
`company_scale`, `company_office`, `monthly_income`, `invite_money`,
`hometown_province`, `hometown_city`, `hometown_area`, `hometown_post`) VALUES
('987', '869', '13099775533', NULL, NULL, '小石头', NULL, '1986-11-18',
'429009118611181111', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL);
INSERT INTO `czbk_finance`.`fn_loan_amount` (`id`, `member_id`, `member_name`,
`credit_amount`, `credit_amount_freeze`, `vouch_amount`, `vouch_amount_freeze`,
`pawn_amount`, `pawn_amount_freeze`, `roam_amount`, `roam_amount_freeze`) VALUES
('987', '869', '13099775533', '200000.000000', '0.000000', '0.000000',
'0.000000', '0.000000', '0.000000', '0.000000', '0.000000');
INSERT INTO `p2p_mock`.`p2p_account` (`id`, `account`, `AvlBal`, `AcctBal`,
`FrzBal`, `create_time`) VALUES ('911', '6021234507160403', '0.00', '0.00',
'0.00', '2020-05-07 16:04:03');-- 借款
INSERT INTO `czbk_finance`.`fn_loan` (`id`, `ind`, `serialno`, `name`,
`member_id`, `member_name`, `amount`, `credited_amount`, `progress`,
`tender_count`, `category_id`, `category_type`, `repay_type`, `period`, `apr`,
`sort_index`, `sort_top`, `status`, `hidden_status`, `additional_status`,
`deposit_certificate`, `certificate_file_id`, `loan_repay_status`,
`loan_repay_time`, `overdue_time`, `add_date`, `add_time`, `verify_time`,
`reverify_time`, `add_ip`, `vouch_company_id`, `op_status`, `marker_type`) VALUES
('642', 'f5380d59791773a8abad4141ff90a5a4', '202008231111', '数据库构造借款1',
'869', '13099775533', '100000.00', '0.00', '0.00', '0', '1', '1', '1', '60',
'7.55', '1', NULL, '3', '1', '-1', '-1', NULL, NULL, NULL, '1609501013', '2020-
05-07', '1588847800', '1588851413', NULL, '1972826569', '0', '-1', '数据库');INSERT INTO `czbk_finance`.`fn_loan_info` (`id`, `loan_id`, `thumbs`, `contents`,
`attachment_ids`, `password`, `use`, `tender_amount_min`, `tender_amount_max`,
`freeze_amount`, `freeze_amount_proportion`, `freeze_period`, `award_status`,
`fail_award_status`, `award_amount`, `award_proportion`, `award_amount_total`,
`validate`, `part_status`, `tender_count`, `comment_status`, `comment_count`,
`is_company`, `company_name`, `vouch_company_info`, `vouch_company_pic`,
`vouch_company_guaranty`, `amount_category_id`, `hits`, `cancel_admin_id`,
`cancel_remark`, `cancel_time`, `verify_admin_id`, `verify_admin_name`,
`verify_remark`, `verify_time`, `verify_ip`, `reverify_admin_id`,
`reverify_admin_name`, `reverify_remark`, `reverify_time`, `reverify_ip`,
`auto_scale`, `is_auto`, `additional_status`, `additional_apr`,
`additional_name`, `additional_amount_max`, `additional_pic`, `product_process`,
`information`) VALUES ('832', '642', NULL, '数据库构造借款1', 'a:0:{}', NULL,
'10102', '100.00', '1000.00', NULL, '10.00', NULL, '-1', '-1', NULL, NULL, NULL,
'239', NULL, '0', '-1', '0', '-1', NULL, NULL, NULL, NULL, '1', '1', NULL, NULL,
NULL, '4', 'admin', '数据库构造借款1 通过', '1588851413', '1972826569', NULL, NULL,
NULL, NULL, NULL, NULL, '1', '-1', '0.000000', NULL, '0.000000', NULL, NULL,
NULL);
UPDATE `czbk_finance`.`fn_loan_amount` SET `credit_amount_freeze`='100000.000000'
WHERE `member_id`='869';
INSERT INTO `czbk_finance`.`fn_loan_amount_log` (`member_id`, `member_name`,
`category_id`, `type`, `amount`, `remark`,
`add_time`) VALUES ('869','13099775533', 1, 4, '100000', '借款冻结',
'1972826569');
- 脚本编写
脚本编写
获取图片验证码、获取短信验证码
获取图片验证码、获取短信验证码
注意:
- 1、随机数为空、随机数为字符串,响应状态码为400,404,如果需要
变绿,就需要加断言且勾选"忽略状态"
- 2、获取短信验证码依赖图片验证码,需要先请求图片验证码,添加cookie管理器进行关联。
注册脚本
注册脚本
提示:
- 1、密码为空、未同意条款为缺陷
- 2、
注册接口中手机号
必须和获取短信验证码接口手机号
一致。
登录脚本
登录脚本
提示:
- 1、解锁需要使用固定定时器登录60秒(60000毫秒)
- 2、查询登录状态(未登录)需要把登录请求删除
multipart/from-data
普通form
认证
认证脚本
三方开户
三方开户-正则表达式提取
难点:分析正则提取公式
结论:提取的数据不一样,其他都一样
表达式编写
input name\u003d\u0027(.?)\u0027 type\u003d\u0027hidden\u0027 value\u003d\u0027(.?)\u0027
请求引用
- 扩展unicode编码
https://tool.chinaz.com/tools/Unicode.aspx
充值
充值
提示:
1、后台充值必须先登录在请求图片验证码,最后调用后台充值
2、三方充值和三方开户一模一样,直接复制即可。
投资