您的位置 首页 > 腾讯云社区

多项目登录互踢测试用例---八音弦

这个场景有点类似与之前写过的[单点登录性能测试方案](https://mp.weixin.qq.com/s/sv8FnvIq44dFEq63LpOD2A),但是并没有在功能和自动化方面有所介绍,刚好最近有了一个新需求,需要测试多项目同账号之间的互踢,写下此文章记录一下。

需求:1、同一账号在web端和pad端需要能保持同时登录,不互踢;2、在两端同时登录的情况下,任意一方修改密码不会导致另外一方登录失效。

对于接口的功能测试来说,这个需求需要请求字少3-4个接口才能完成一次测试,使用`postman`或者`JMeter`等工具,都是非常麻烦的。涉及到了修改密码,所以不能直接复制有效`token`,再加上Web端已经接入单点登录,更无法直接从单接口请求中获取验证令牌。对于自动化来讲面临的境遇差不多,之前自动化监控的都是基于`testNG`和`restassured`的单接口监控,并不能很好对这个需求进行监控,只能望洋兴叹。

下面分享一下我的对于两个接口的测试脚本:

需求1:

```Groovy

package com.okayqa.teacherpad

import com.fun.frame.SourceCode

import com.okayqa.appmiddle.function.UserCente

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:

```Groovy

package com.okayqa.teacherpad

import com.fun.frame.SourceCode

import com.okayqa.appmiddle.function.UserCente

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测试框架视频讲解(序)](https://mp.weixin.qq.com/s/CJrHAAniDMyr5oDXYHpPcQ)

- [获取HTTP请求对象--测试框架视频讲解](https://mp.weixin.qq.com/s/hG89sGf96GcPb2hGnludsw)

- [发送请求和解析响应—测试框架视频解读](https://mp.weixin.qq.com/s/xUQ8o3YuZOChXZ2UGR1Kyw)

- [json对象基本操作--视频讲解](https://mp.weixin.qq.com/s/MQtcIGKwWGEMb2XD3zmAIQ)

- [GET请求实践--测试框架视频讲解](https://mp.weixin.qq.com/s/_ZEDmRPXe4SLjCgdwDtC7A)

- [POST请求实践--视频演示](https://mp.weixin.qq.com/s/g0mLzMQ4Br2e592m3p68eg)

- [如何处理header和cookie--视频演示](https://mp.weixin.qq.com/s/MkwzT9VPglSnOxY7geSUiQ)

- [FunRequest类功能--视频演示](https://mp.weixin.qq.com/s/WGS6ZwAvw7X4MC004Gz4pA)

文件本身是一个Groovy脚本,利用[java测试框架如何执行groovy脚本文件](https://mp.weixin.qq.com/s/0GYt1l3_z5-1qzBNl6_PzA)或者直接在服务器上使用命令行`groovy test.groovy`来执行这个脚本。

这个测试用例并没有断言,也没有报告。因为我觉得无用且浪费时间。那么如何判断成功或者失败呢?我的方案如下:在发送请求获取响应时候,首先校验`HTTP code`,然后将响应结果解析为`jsonobject`,校验通用的`json`结构体,包括`响应code`和`响应消息`,然后在解析响应中`data`时候,会进行一些业务的验证,例如:

```Java

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;

}

```

还有修改密码的接口:

```Java

/**

* 修改密码,默认会把用户名当做密码,会更新当前用户的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实现实例](https://mp.weixin.qq.com/s/DJXCBEG3SbybfbT6blO1jA)。分级推送的需要在控制台配置一下,很简单。

诚然,上面两个脚本并不算严格意义上的自动化测试用例,是直接把脚本丢到服务器上即可,这样简单省事儿。如果是自动化测试的话,还需要考虑测试脚本的管理,测试用例执行等等因素,有兴趣的可以翻翻之前的文章,这里就不多说了。

---

* **郑重声明**:首发于公众号“FunTester”,原创日更,欢迎关注交流,禁止第三方(腾讯云除外)转载、发表。

---来自腾讯云社区的---八音弦

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: