「原创声明:保留所有权利,禁止转载」
update 某一个字段值和原来值相同时性能比不同时更高。
在对服务端进行测试的时候,经常会遇到这类情况:单个接口的功能就是修改数据库中某一条数据某个字段的值。在对这类接口进行压测的过程中,遇到一个难点,如何每次都设置不同的值,当然可以通过获取一类的随机数的形式规避掉重复的概率,但是在特定场景下依然无法解决,比如字段值范围偏小。
在工作中遇到一个典型的案例就是对于用户性别的修改,用户性别属性在数据库中以 0-3 的数字表示无,男,女,保密。在接口参数中也只有四个选择变量值。
这这种情况下,使用刚才的方案采取随机数的情况就难以实现,因为重复的概率很大。
下面是我当时采取的测试方案(仅供参考):
并发策略依然采用之前的方案:一个线程绑定一个用户,不断发起请求。
解决传参重复:每个线程绑定一个 integer 类对象,然后每次把对象的值当做性别的值放到请求参数里面去。完成请求之后,执行 “++” 操作,然后再执行对 4 取模然后赋值本身。伪代码如下:
int i;
//循环开始
doRequest(i);
i++;
i=i%4;
//循环结束
//单线程执行完成
通过这样的方法即可解决请求参数可能跟原有值重复问题,如果还需要对每一次结果进行验证,可继续在接口方法中进行拓展。
下面是我用 Java 写的一个 demo,如果是 Groovy 写脚本的话会更简单一些。
package com.fun;
import com.fun.base.constaint.ThreadBase;
import com.fun.frame.SourceCode;
import com.fun.frame.excute.Concurrent;
import com.fun.frame.httpclient.FanLibrary;
import java.util.ArrayList;
import java.util.List;
public class G extends SourceCode {
public static void main(String[] args) {
int threadNum = 100;
int times = 1000;
List<ThreadBase> threadTask = new ArrayList<>();
for (int i = 0; i < threadNum; i++) {
ThreadBase<Integer> threadBase = new ThreadBase<Integer>(i, times) {
User user;
@Override
protected void before() {
user = new User(t);
}
@Override
protected void doing() throws Exception {
user.doRequest(t++);
// user.check();//校验
t = t % 4;
}
@Override
protected void after() {
}
};
threadTask.add(threadBase);
}
Concurrent concurrent = new Concurrent(threadTask);
concurrent.start();
FanLibrary.testOver();
}
}
class User {
public User(int i) {
}
public void doRequest(int i) {
System.out.println("完成!" + i);
}
public boolean check() {
return true;
}
}
然后脚本写完之后还可以通过把线程数和请求数进行参数化来让使用更加灵活。
技术类文章精选
- java 一行代码打印心形
- Linux 性能监控软件 netdata 中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 将 swagger 文档自动变成测试代码
- 五行代码构建静态博客
- 基于 java 的直线型接口测试框架初探
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 自动化测试的问题所在
- 成为优秀自动化测试工程师的 7 个步骤
- 未来 10 年软件测试的新趋势 - 上
- 未来 10 年软件测试的新趋势 - 上
- 手动测试存在的重要原因
- 成为自动化测试的 7 种技能
大咖风采
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。