【性能测评】来测试下自己是否真的会性能测试了
前言
经常看到有同学说自己会性能测试了,但是一实操就无从下手,问很多基础问题
甚至有的测试人员对性能理论理解也有偏差、场景设计也不符合线上实际情况,最终导致测试的结果没有参考价值
性能理论
并发是什么?绝对并发和相对并发参考哪个更合适?
并行和并发的区别?
压力线程、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
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!