如何性能测试中进行业务验证?

在性能测试过程中,验证HTTP code和响应业务code码是比较基础的,但是在一些业务中,这些参数并不能保证接口正常响应了,很可能返回了错误信息,所以这个时候对接口进行业务验证就尤其重要。下面分享一个对某个资源进行业务验证的Demo。

改接口请求资源详情,其中有一个字段是表示该用户对于该资源的操作状态,踩赞类型:1-赞,2-踩,3-取消赞,4-取消踩。

改压测一个接口,但是需要两个接口的数据提供数据,一个是登录,一个是操作改资源的接口。

具体的项目结构之前讲过,主要解决了请求方式,身份验证的问题,这里不再细说登录以及如何将身份令牌传递给。下面分享一下点赞和资源详情的方法代码,两者分属两个模块未在一个类里面,我这里单独挑出来:

 /**
     * 点赞和踩
     *
     * @param resId     资源id
     * @param operation 操作类型(踩赞类型:1-赞,2-踩,3-取消赞,4-取消踩)
     * @return
     */
    public JSONObject likeOrNot(int resId, int operation) {
        String url = FlowApi.LIKE_OR_NOT;
        JSONObject params = getParams();
        params.put("isCoursePackage", 0);//标识是否课程包 0-否 1-是
        params.put("operation", operation);
        params.put("resId", resId);
        params.put("resType", 5);//1-课件;2-题集;3-教学资料;4-课程包;5:题目
        JSONObject response = getPostResponse(url, params);
        output(response);
        return response;
    }

/**
     * 课程包详情
     *
     * @param resid 资源ID 1030167
     * @return
     */
    public JSONObject courseDetail(int resid) {
        String url = LauncherApi.COURSE_DETAIL;
        JSONObject params = getParams();
        params.put("id", resid);
        JSONObject response = getPostResponse(url, params);
//        output(response);
        return response;
    }
下面是压测脚本,是用Groovy写的,方便在服务器上调试,但是跟Java有些不同,如果用编译器的童鞋请注意编译器异常,有些找不着引用对象的时候需要手动,或者忽略这些异常:

    public static void main(String[] args) {
        def argsUtil = new ArgsUtil(args)
        def thread = argsUtil.getIntOrdefault(0, 2)
        def times = argsUtil.getIntOrdefault(1, 2)

        def threads = []

        thread.times {

            threads << new ThreadLimitTimesCount<Integer>(it, times) {

                def resid = 1030167

                def operation = getRandomInt(4)

                def drive

                @Override
                public void before() {
                    super.before()
                    def base = new OkayBase(it)
                    def flow = new Flow(base)
                    flow.likeOrNot(this.resid, this.operation)
                    this.drive = new Launcher(base)
                    sleep(1000)
                }


                @Override
                protected void doing() throws Exception {
                    def response = this.drive.courseDetail(this.resid)
                    int anInt = response.getJSONObject("data").getInt("like_state");
                    if (anInt != 3) fail();
                }

                @Override
                protected void after() {

                }
            }
        }

        new Concurrent(threads).start()

        allOver();
    }
在doing()方法中response的响应处理可能会抛出异常,fail()是一个封装的抛出通用运行异常的方法,用来标记响应失败,在框架中会捕捉doing()方法的异常,并记录统计线程运行过程的数据。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/243968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ros2+在Ubuntu上安装gazebo

Binary Installation on Ubuntu(Ubuntu上binary方式安装gazebo) Harmonic binaries are provided for Ubuntu Jammy (22.04) and Ubuntu 24.04 (when its released). &#xff08;在Ubuntu22.04或者24.04上都是安装Harmonic版本的gazebo&#xff09;The Harmonic binaries are…

issue unit

The Issue Unit issue queue用来hold住&#xff0c;已经dispatched&#xff0c;但是还没有执行的uops&#xff1b; 当一条uop的所有的operands已经ready之后&#xff0c;request请求会被拉起来&#xff1b;然后issue select logic将会从request bit 1的slot中&#xff0c;选择…

指令寻址(顺序寻址和跳跃寻址)

目录 一. 顺序寻址1.1 定长指令字结构1.2 变长指令字结构 二. 跳跃寻址 \quad 指令寻址:如何确定下一条指令的存放地址? \quad 一. 顺序寻址 \quad 1.1 定长指令字结构 \quad 主存按字编址 \quad 按字节编址 1.2 变长指令字结构 \quad 同种颜色代表一条指令 由于无法判断当前…

制衣厂生产ERP系统怎么样?制衣厂生产ERP软件哪个好

有很多的制衣厂在订单处理、物料、仓储、销售、仓储、物料编码、车间成本核算、计件工资核算等方面还存在不少改进空间。 而经过多年的发展&#xff0c;现如今制衣行业的竞争比较激烈&#xff0c;如何提升各业务部门协同效率&#xff0c;减少车间物料损耗&#xff0c;简化生产…

idea的快捷键

1.调整字体的大小 文件夹的循序:setting-Editor-Font 界面: 2.删除当前行 文件夹的循序:setting-Keymap-DeleteLine 界面: 3.导入该行需要的类 文件夹的循序:setting-Editor-General-Auto import 界面: 4.格式化代码 文件夹的循序:setting-keymap-Reformat 界面: 5.快速…

【MySQL】——数据类型及字符集

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

loki 如何格式化日志

部署 grafana-loki 首先介绍一下如何部署 官方文档&#xff1a;部署 grafana-loki 部署命令 设置集群的存储类&#xff0c;如果有默认可以不设置设置命名空间 helm install loki oci://registry-1.docker.io/bitnamicharts/grafana-loki --set global.storageClasslocal -n …

程序员退一步的海阔天空,是考公还是烤冷面?

打败一个志向坚定的程序员只需要一个简单的年龄危机、身体预警.......钱难挣、屎难吃。996的钱更是伤身体&#xff0c;或者是被裁员、劝退的无力。算了~这份工作也不是非要不可&#xff0c;劳资不干了&#xff01;&#xff08;hahahahaha....bushi)人生在世&#xff0c;进可攻、…

Soul 推出“SoulX”AI人工智能模型,已应用于旗下 App“苟蛋”AI聊天机器人

Soul社交平台最近发布了名为”SoulX“的AI人工智能模型&#xff0c;SoulX将作为Soul “AIGC社交”布局的重要基建&#xff0c;具备prompt驱动、条件可控生成、上下文理解、多模态理解等能力&#xff0c;垂直应用于平台上多元社交互动场景&#xff0c;如智能对话机器人、AI辅助聊…

模拟微信、QQ、支付宝那样的随机红包

随机拆分给定金额为给定个数红包&#xff0c;像微信、QQ、支付宝随机红包那种&#xff0c;要求红包总金额绝对与给定金额相等。 (笔记模板由python脚本于2023年12月14日 12:37:58创建&#xff0c;本篇笔记适合熟悉Python随机数模块random的整型随机方法randint&#xff0c;能熟…

卫浴企业做网站的效果如何

卫浴产品无论工程还是家庭中都有较高需求度&#xff0c;相关品牌或经销商也不少&#xff0c;然而在实际经营中&#xff0c;卫浴品牌商家也面临着一些痛点&#xff1a; 1、品牌宣传拓客难 卫浴产品并不缺客户&#xff0c;但大小品牌众多&#xff0c;商家想要突围绝非易事&…

国产数据库适配-人大金仓(kingbase V8R3)

金仓数据库是基于POSTGRE_SQL 参考资料 国产数据库人大金仓踩坑记录和函数适配_金仓数据库关系不存在-CSDN博客 Springboot工程 适配人大金仓 kingbase V8R3 引入驱动包和方言包 hibernate-5.2.17.Finaldialect.jar kingbase8-8.2.0.jar application.yml文件 driver-cla…

计算机网络安全原理习题参考答案

1.9习题 一、单项选择题 1. ISO 7498-2从体系结构的角度描述了5种可选的安全服务&#xff0c;以下不属于这5种安全服务的是&#xff08;  D  &#xff09; A. 数据完整性   B. 身份鉴别   C. 授权控制   D. 数据报过滤 2. ISO 7498-2描述了8种特定的安全机制&…

破局创新,天翼云HBlock如何以小见大、以柔克刚?

引言&#xff1a;另辟蹊径开拓创新 不走传统存储厂商的“寻常路” 【全球存储观察 &#xff5c; 科技热点关注】 在分布式块存储领域&#xff0c;大部分厂商的安装软件套件大小都在GB级。然而&#xff0c;天翼云破天荒地将存储资源盘活系统HBlock的软件安装包浓缩到了170MB&a…

SFP3006-ASEMI大电流快恢复二极管SFP3006

编辑&#xff1a;ll SFP3006-ASEMI大电流快恢复二极管SFP3006 型号&#xff1a;SFP3006 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 最大平均正向电流&#xff1a;30A 最大重复峰值反向电压&#xff1a;600V 产品引线数量&#xff1a;3 产品内部芯片个数&#xff1…

【前端学习记录】记一次分片上传逻辑的调试过程

前言 在项目开发的过程中&#xff0c;经常会遇到上传和下载&#xff0c;对于上传来说&#xff0c;如果是小文件的话&#xff0c;接口响应会比较快&#xff0c;但是对于大文件&#xff0c;则需要对其分片以减少请求体的大小和上传时间。 小文件上传 以Vue框架使用<el-uplo…

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…

VUE篇之日历组件

1.简单日历组件展示 思路&#xff1a;根据当前月的第一天是星期几&#xff0c;来显示日期 <template><div class"wrap"><el-button click"preMonth">上个月</el-button><el-tag>当前年份{{ curYear }}</el-tag><e…

解决msvcr120.dll文件丢失问题

项目场景&#xff1a; 在VMware虚拟机中安装win7家庭版系统&#xff0c;安装MySQL数据库&#xff0c;部署项目文件。 问题描述 安装MySQL数据库过程中提示“msvcr120.dll文件丢失”。 原因分析&#xff1a; 提示丢失msvcr120.dll文件&#xff0c;我们首先要到C:\Windows\Sys…

Windows server 2016 如何禁止系统自动更新

1.打开“运行”&#xff0c;输入cmd&#xff0c;点击“确定”。 2.输入sconfig&#xff0c;然后按回车键。 3.输入5&#xff0c;然后按回车键。 4.示例需要设置为手动更新&#xff0c;即输入M&#xff0c;然后按回车键。 5.出现提示信息&#xff0c;点击“确定”即可。