这个场景有点类似与之前写过的单点登录性能测试方案,但是并没有在功能和自动化方面有所介绍,刚好最近有了一个新需求,需要测试多项目同账号之间的互踢,写下此文章记录一下。
需求:1、同一账号在 web 端和 pad 端需要能保持同时登录,不互踢;2、在两端同时登录的情况下,任意一方修改密码不会导致另外一方登录失效。
对于接口的功能测试来说,这个需求需要请求字少 3-4 个接口才能完成一次测试,使用postman
或者JMeter
等工具,都是非常麻烦的。涉及到了修改密码,所以不能直接复制有效token
,再加上 Web 端已经接入单点登录,更无法直接从单接口请求中获取验证令牌。对于自动化来讲面临的境遇差不多,之前自动化监控的都是基于testNG
和restassured
的单接口监控,并不能很好对这个需求进行监控,只能望洋兴叹。
下面分享一下我的对于两个接口的测试脚本:
需求 1:
package com.okayqa.teacherpad
import com.fun.frame.SourceCode
import com.okayqa.appmiddle.function.UserCenter
import com.okayqa.teacherpad.function.UserInfo
class TEA_PAD22 extends SourceCode {
public static void main(String[] args) {
def base1 = new com.okayqa.teacherpad.base.OkayBase(2)
new UserInfo(base1).getUserInfo()
def base2 = new com.okayqa.teacherweb.base.OkayBase(2)
new UserCenter(base2).getGrades()
allOver()
}
}
需求 2:
package com.okayqa.teacherpad
import com.fun.frame.SourceCode
import com.okayqa.appmiddle.function.UserCenter
import com.okayqa.teacherpad.function.UserInfo
class TEA_PAD22 extends SourceCode {
public static void main(String[] args) {
def base1 = new com.okayqa.teacherpad.base.OkayBase(2)
def base2 = new com.okayqa.teacherweb.base.OkayBase(2)
new UserInfo(base1).modifyPassword(base1.getUname())
new UserCenter(base2).getGrades()
allOver()
}
}
这里就不多介绍这个测试框架了,有兴趣的同学可以翻翻旧文章,我录了一些视频,目录如下:
接口测试视频
- FunTester 测试框架视频讲解(序)
- 获取 HTTP 请求对象 -- 测试框架视频讲解
- 发送请求和解析响应—测试框架视频解读
- json 对象基本操作 -- 视频讲解
- GET 请求实践 -- 测试框架视频讲解
- POST 请求实践 -- 视频演示
- 如何处理 header 和 cookie--视频演示
- FunRequest 类功能 -- 视频演示
文件本身是一个 Groovy 脚本,利用java 测试框架如何执行 groovy 脚本文件或者直接在服务器上使用命令行groovy test.groovy
来执行这个脚本。
这个测试用例并没有断言,也没有报告。因为我觉得无用且浪费时间。那么如何判断成功或者失败呢?我的方案如下:在发送请求获取响应时候,首先校验HTTP code
,然后将响应结果解析为jsonobject
,校验通用的json
结构体,包括响应code
和响应消息
,然后在解析响应中data
时候,会进行一些业务的验证,例如:
public JSONObject getUserInfo() {
String url = UserInfoApi.USER_INFO;
JSONObject params = getParams();
JSONObject response = getPostResponse(url, params);
output(response);
if (isRight(response)) {
JSONObject data = response.getJSONObject("data");
String name = data.getString("name");
int subject_id = data.containsKey("subject_id") ? data.getInteger("subject_id") : data.getInteger("subjectId");
String subjectName = Common.getSubjectName(subject_id);
if (subjectName.equals("缺少记录")) logger.error(getUid() + EMPTY, name);
logger.info("老师名称:{},学科:{}", name, subjectName);
}
return response;
}
还有修改密码的接口:
/**
* 修改密码,默认会把用户名当做密码,会更新当前用户的token
*
* @return
*/
public JSONObject modifyPwd() {
String url = UserApi.MODIFY_PWD;
JSONObject params = getParams();
params.put("newpwd", getPassword(this.getUname()));
params.put("oldpwd", getPassword(this.getPwd()));
JSONObject response = getPostResponse(url, params);
output(response);
if (isRight(response)) {
String string = response.getJSONObject("data").getString("token");
this.setToken(string);
super.setToken(string);
}
return response;
}
其他校验都在框架中完成,不同的验证对应不同的验证级别,不同的级别对应不同的错误级别和推送级别,我目前的方案是:alertover 推送 api 的 java httpclient 实现实例。分级推送的需要在控制台配置一下,很简单。
诚然,上面两个脚本并不算严格意义上的自动化测试用例,是直接把脚本丢到服务器上即可,这样简单省事儿。如果是自动化测试的话,还需要考虑测试脚本的管理,测试用例执行等等因素,有兴趣的可以翻翻之前的文章,这里就不多说了。
- 郑重声明:首发于公众号 “FunTester”,原创日更,欢迎关注交流,禁止第三方(腾讯云除外)转载、发表。
技术类文章精选
- Linux 性能监控软件 netdata 中文汉化版
- 性能测试框架第三版
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 性能测试中图形化输出测试数据
- 压测中测量异步写入接口的延迟
- 多种登录方式定量性能测试方案
- JMeter 吞吐量误差分析
无代码文章精选
- 写给所有人的编程思维
- JSON 基础
- 2020 年 Tester 自我提升
- 自动化新手要避免的坑(上)
- 自动化新手要避免的坑(下)
- 如何成为全栈自动化工程师
- 左移测试
- 选择手动测试还是自动化测试?
- 自动化测试项目为何失败