【性能测评】来测试下自己是否真的会性能测试了
前言
经常看到有同学说自己会性能测试了,但是一实操就无从下手,问很多基础问题
甚至有的测试人员对性能理论理解也有偏差、场景设计也不符合线上实际情况,最终导致测试的结果没有参考价值

性能理论
并发是什么?绝对并发和相对并发参考哪个更合适?
并行和并发的区别?
压力线程、tps、并发用户数的区别?经常听一些人说,公司要求500并发,这个500并发表示什么呢?
压力线程数是否是并发用户数?或者是虚拟用户?或者是用户?
tps、并发用户数、并发线程数、在线用户数,分别是什么?
并发度和活跃度的区别?
客户端并发线程数大,是否说明服务端性能好?
如何理解:性能测试,负载测试,容量测试,递增测试,强度测试等等?
你们性能指标有哪些?
qps和tps区别?到底用哪个更合适?
你觉得使用28原则作为压测目标合理么?
pv可以用来作为性能测试的指标么?
性能测试是如何做的?流程是?交付了性能测试报告,测试任务是否就结束了?
性能测试方案包含哪些内容?
性能测试报告包含哪些内容?如何一目了然展示性能测试的价值?
如何定义事务?应用场景是?
思考时间如何设置?
加思考时间对tps的影响是?
负载和cpu使用率的关系是?
如何找到并发数、平均响应时间、tps的最佳平衡点?
内存泄露和内存溢出的区别?
单机最大tps100,8台服务器,最大tps是多少?
什么是关联?
为什么要参数化?
压测过程中,资源使用率是否越低越好?
压测环境是否必须和生产环境保持一致?压测环境和生产环境不一致怎么办?
并发工具:jmeter等
jmeter中,线程数和Ramp-Up Period 该如何设置?比如某接口目标是:tps300、响应时间1s以内、成功率100%
jmeter参数化数据,数据量以及数据分布如何设计?
不同的工具,压测结果不一样怎么办?
Jmeter跑接口时,请求时需要读取csv文件进行参数化,读取过程会不会拖慢发送请求的速度?
jmeter压测时间到了,但是某个请求还没返回(服务器还在处理中),在jmeter中,这个请求是算成功还是失败?
什么时候需要加集合点?
jmeter关联练习题(正则、jsonpath)--能做出来,关联就基本没问题了
详见:https://www.cnblogs.com/uncleyong/p/14329139.html
jmeter实现aes解密
调用aesDecrypt方法解密
String keyword = "eb9dc4aa69d6582693ba2e3ebe2fe260";
String data = "C4564EEBA5C956464B1A050F4961A7C5A41D33414BA8175B668ACF8BFAB228D484BD2FB175C854F5DDBF13470D61AD073E6432C45B81303578BF004917B8DEE4";
期望结果:
{"transType": "V2101","transDate": "2010-12-24 12:25:15"}
SHA256.java
package com.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class SHA256 {
private static int digit = 128;
private static String keyword = "eb9dc4aa69d6582693ba2e3ebe2fe260"; // 秘钥
public static String getEncryptResponse(String jsonStr,String keyword,String unionInsCode){
HashMap<String, String> result = new HashMap<String, String>();
SimpleDateFormat fmt = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
try {
String ret = aesEncrypt(jsonStr, keyword);
result.put("transTime", fmt.format(new Date()));
result.put("tranSid", getSHA256(ret));
result.put("data", ret);
result.put("unionInsCode",unionInsCode);
}catch(Exception e){
System.out.println("获取加密报文异常:" + e);
}
return JSON.toJSONString(result);
}
public static Map<String,Object> getDecryptReq(String data,String keyword){
String jsonStr = null;
JSONObject jsonObject = null;
try {
jsonStr = aesDecrypt(data, keyword);
jsonObject = JSONObject.parseObject(jsonStr);
}catch(Exception e){
System.out.println("获取加密报文异常:" + e);
}
return (Map<String,Object>)jsonObject;
}
public static String getSHA256(String str) {
MessageDigest messageDigest;
String encodestr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes("UTF-8"));
encodestr = byte2Hex(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodestr;
}
private static String byte2Hex(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();
String temp = null;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
stringBuffer.append("0");
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
}
// aes解密
public static String aesDecrypt(String content, String password) throws Exception {
byte[] contentByte = parseHexStr2Byte(content);
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(password.getBytes("UTF-8"));
kgen.init(digit, random);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] result = cipher.doFinal(contentByte);
String returStr = new String(result,"UTF-8");
return returStr;
}
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}
jmeter后端监听器,measurement的值是不是必须为jmeter?

性能场景及设计
性能场景的分类?
不同压测场景的区别?
混合场景,如何解决依赖?
性能稳定性测试,跑多久合适?7x24h?1个月?这个时间如何定才合理?
稳定性场景,需要设置递增场景么?
什么是性能测试的业务模型?
如何获取业务模型?
场景设计
假设某系统有ABCDE五个频繁使用的业务接口,通过日志平台统计的比例如下:
日志平台:https://www.cnblogs.com/uncleyong/p/15527484.html

常用的流程有:ABCDE、ABCD、ABC
请结合jmeter,设计场景
性能监控
对于主流的k8s+微服务,你的监控是如何设计的?
针对主流中间件(redis)、数据库、jvm,你是如何监控的?
性能分析(实战)
请画出你最近压测的项目的架构图、并描述你对本次任务的性能测试设计(比如:场景、数据、监控等)
如果tps上不去,你的监控分析思路是?如何分析定位?(面试会深入问各种技术栈、监控、分析等)
请举例一个最有成就感的性能bug ,详细说说(包含场景设计、监控、分析、定位、调优)
网卡的大吞吐量为什么导致更多cpu开销?
linux服务器,cpu-内存-磁盘之间的关系是?
既然cs消耗cpu,那么,为什么不设置:线程数<=逻辑cpu个数?
如何对异步处理的http接口进行性能测试?
看到下图结果,分析思路是?

线上全链路压测
线上全链路压测的目的是?
开展线上全链路需要具备哪些条件?适用的场景是?
全链路压测的流程是?
如何实现代码无侵入的全链路压测?
全链路压测的难点在哪?
全链路压测如何解决流量识别问题?
有线上全链路压测,线下性能测试还有没有必要做?
笔试题
测试小伙伴的笔试题

性能测试参考资料
jmeter + springcloud微服务 + k8s + skywalking + arthas + ...:https://www.cnblogs.com/uncleyong/p/15475614.html
最新原文:https://www.cnblogs.com/uncleyong/p/14228500.html
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号