遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

【性能测评】来测试下自己是否真的会性能测试了

前言

经常看到有同学说自己会性能测试了,但是一实操就无从下手,问很多基础问题

甚至有的测试人员对性能理论理解也有偏差、场景设计也不符合线上实际情况,最终导致测试的结果没有参考价值

 

性能理论

并发是什么?绝对并发和相对并发参考哪个更合适?

 

并行和并发的区别?

 

压力线程、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

 

【bak】

 

最新原文:https://www.cnblogs.com/uncleyong/p/14228500.html

 

posted @ 2021-01-03 10:31  全栈测试笔记  阅读(8905)  评论(12编辑  收藏  举报
浏览器标题切换
浏览器标题切换end