自动化测试

Jmeter / Selenium / TestNG
Jmeter中使用javaScript截取所需字符串并直接引用在变量中
Jmeter

Jmeter中使用javaScript截取所需字符串并直接引用在变量中

1.说明 我的使用场景是,使用正则表达式获取了一串字符串(自定义变量名为session) 拿到的session如下: SESSION=c9d7e012-dd99-40da-88a2-c9d62ef3d987 但实际使用中只需要SESSION的值 c9d7e012-dd99-40da-88a2-c9d62ef3d987 所以需要截取,截取的方法很多,这里给出使用javaScript的方案,也是相对省事儿的方案(Jmeter以及基于Jmeter的自动化测试平台比如metersphere都直接支持JavaScript,可以直接填在变量里) 2.实现 方法 __javaScript:javaScript函数执行一段JavaScript代码并返回其值 __substring:取字符串中的字串 举个例子: //截取从位置为8开始到最后的字符串(注意字符串起点位置是0,不是1 !!!) ${__javaScript("${session}".substring(8),)} //截取从位置为0开始,不包含8的字符串 ${__javaScr
1 min read
Python批量打开excel中的网页
自动化测试

Python批量打开excel中的网页

import webbrowser import xlrd def autoOpenPage(): wb = xlrd.open_workbook("book1.xlsx") sht = wb.sheet_by_name("Sheet1") for x in range(sht.nrows): webbrowser.open(sht.cell(x, 0).value) if __name__ == '__main__': autoOpenPage() 表格文件内容如下: 会使用系统默认浏览器打开excel表格中的网址: 需要注意的是,xlrd这个包不要使用最新的2.0版本,该版本不知出于什么原因移除了对xlsx格式的支持,使用时会报xlrd.biffh.XLRDError: Excel xlsx file; not
1 min read
SQL while循环insert批量造测试数据
自动化测试

SQL while循环insert批量造测试数据

直接上代码 对于e_coupon_put主要存优惠券、活动、用户的关联信息(优惠券发放记录) 性能测试需要批量造 同优惠券、同活动但不同用户的记录。 drop procedure if exists testdatainsert; #删除已经存在的存储过程 create procedure testdatainsert() #创建存储过程 begin declare y int default 1; declare custId int default 2133594; while y < 100000 do insert into e_coupon_put(act_id, CPN_ID, CUST_ID, PUT_TIME,PUT_NUM)
1 min read
SQL 取出满足条件的最新一条数据
自动化测试

SQL 取出满足条件的最新一条数据

场景是查出某手机号最新一条订单匹配到的所有优惠活动。 订单表中有手机号,订单活动表与订单表通过order_no匹配。 经过实践下面的写法效率比较高,比按时间排序快得多。而且子查询只返回一条结果,对内存的占用也比较好。 select * from o_order_act where ORDER_NO = (select ORDER_NO from o_order where o_order.APPLY_TIME = (SELECT MAX(APPLY_TIME) as APPLY_TIME from o_order where MOBILE = '18012344321'));
1 min read
Meterphere自动化测试-SQL脚本与断言
自动化测试

Meterphere自动化测试-SQL脚本与断言

区别于上一篇Meterphere自动化测试-使用数据库查询结果对接口进行断言断言写在接口中,是先从数据库中查询出结果(以数据库为准),再去跟接口返回的结果比对。 本篇是先完成接口请求(涉及一些新增数据), 再从数据库中查出新增的数据,再依据场景进行比对。 1.配置数据库环境 见上一篇 2.添加自定义请求 编写sql脚本 见上一篇 3.在自定义请求中添加断言 断言规则->选择"脚本"->点击编辑 比如sql中的按列存储有actId字段,此时需要取出actId进行比对,填写表格后,代码自动生成。
1 min read
Meterphere自动化测试-使用数据库查询结果对接口进行断言
Metersphere

Meterphere自动化测试-使用数据库查询结果对接口进行断言

本文参考: https://blog.csdn.net/plateauandsp/article/details/114646657 1. 项目环境中配置数据库 路径:项目设置-项目环境-数据库配置。 一个环境中可以配置多个数据源,当自动化脚本涉及多个数据库时,无需切换多个环境,只需在不同步骤中选择不同的数据源即可。 2. 自动化脚本添加 自定义请求 请求类型为SQL 选择环境、数据源、编写脚本、设置按列存储的变量名。 按列存储的数据类型是数组,所以取单行数据要标明行号如 ${stationName_1} 3. 在接口断言中使用按列存储的变量(即上一步中的数据库查询结果) 比如上一步中STATION_NAME被存储为stationName变量中,后续如需使用某行查询结果则通过${stationName_1}使用。下划线后数字为1即为第一行。
2 min read
使用Metersphere进行自动化测试和压力测试
自动化测试

使用Metersphere进行自动化测试和压力测试

1. 自动化测试 1.1 定义接口 手动创建 批量导入接口 支持从postman、jmeter、swagger导入。需要主机的是,从Jmeter导入的接口不会附带断言、前置处理脚本等内容,只能导入接口本身。 1.2 环境配置 创建环境 环境属于项目的配置,所以需要在项目配置中进行配置。 主要需要配置的内容有:环境通用的变量、域名、数据库、前置后置脚本、全局断言等等 1.3 新建场景 开始分场景进行自动化测试的编写 添加步骤、导入接口 点击右下角的加号 添加“步骤” 选择接口列表导入,导入之前创建的接口 设置接口前置后置处理 选择前置、后置脚本 点击添加 然后将之前在Jmeter写好的Beanshell后置处理器中的脚本粘贴进来 配置场景变量 将之前在Jmeter中的用户自定义变量和http请求头配置写在这里 指定运行环境、执行测试 1.4 遇到的问题和解决方式 1.
9 min read
Jmeter 使用自带V函数进行带变量的字符串参数拼接
自动化测试

Jmeter 使用自带V函数进行带变量的字符串参数拼接

需求 JWT标准中请求头中需要加上authorization参数,该参数是由固定字符串和从上个接口返回的token字段一起拼接而成 如下文所示: authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxODUxNjAxNzc0NCIsImNsaWVudFR5cGUiOiIxMCIsImN1c3RJZCI6IjIxMzM4NjciLCJpc3888888889kLWJ1c2kteGR0LWNzdC13ZWIiLCJleHAiOjE2NTcxODA2NDAsImlhdCI6MTY1NzE4MDQ2MH0.ZoACgiB43RMqZLJ4hcEmskae1w8-Wnjrf-bqUYvIAfY 所以在接口自动化脚本编写时,要进行字符串的拼接 步骤: 1. 打开jmeter上的函数助手,选择—V功能,按下图步骤输入想拼接的字段组合,点击生成: 2. 粘贴到使用该函数结果的位置,如无其他参数,要去掉最后面的逗号,最
1 min read
解决jdk版本不兼容导致的Base64加密问题java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder
自动化测试

解决jdk版本不兼容导致的Base64加密问题java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

参考:https://blog.csdn.net/weixin_40052298/article/details/124896005 问题 使用MeterSphere测试平台进行自动化测试时,发现引入的一个第三方jar中的方法在执行时报错: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 原因 搜索之后发现 sun/misc/BASE64Encoder 这个东西仅在jdk1.8以及之前的版本存在,更高版本的jdk不存在了。 而MeterSphere(1.20lts)使用的jdk版本是jdk11。 解决 1. 添加 commons-codec 依赖 commons-codec commons-codec 1.6 2. 代码中引入 import org.apache.comm
1 min read
解决MeterSphere前置处理Beanshell 无法从sampler.getArguments()拿取get请求参数
自动化测试

解决MeterSphere前置处理Beanshell 无法从sampler.getArguments()拿取get请求参数

起因 因为项目请求需要经过加密,而加密需要在请求前拿取请求参数,进行加密后重新给请求头中sign等字段赋值,所以需要拿取现有请求入参,并转为map以便后续处理,Jmeter Beanshell代码如下: import org.apache.jmeter.config.Arguments; //获取请求入参args,转为map Arguments args = sampler.getArguments(); log.info("请求数据====" + args); Map argsMap = args.getArgumentsAsMap(); log.info("argsMap ==============" + argsMap); 但以上代码在MeterSphere中无法拿取到get请求 (MeterSphere版本 v1.20.6-lts)(而且奇怪的是post请求的入参是可以拿取到的) 解决 所以需要手动从url中拿取String格式的参数字段,再自己进行处理,代码如下: String requestQuery = sampler.getUr
1 min read
Jmeter

Jmeter解决返回值中文乱码

本文参考:https://www.cnblogs.com/rslai/p/11661003.html 对于返回中文乱码又分两种: 1. 返回UTF-8中文字符 2. 返回unicode编码信息 1. 返回UTF-8乱码的情况 如下图返回的就是utf-8的中文字符显示一堆花码。 解决方案1(推荐) 1. 添加BeanShell PostProcessor 2. 加入如下代码 prev.setDataEncoding("utf-8") 3. 重新请求,结果如下图所示 解决方案2(不推荐) 另外一个解决方法,修改 jmeter.properties 配置文件 1. 打开 jmeter.properties 配置文件 vi jmeter.properties 2. 找到 sampleresult.default.encoding,
3 min read
Jmeter 使用Beanshell PostProcessor处理json返回值
自动化测试

Jmeter 使用Beanshell PostProcessor处理json返回值

摘要 工作中遇到接口的返回值需要经过解密之后才能看到真正的value,这就给接口自动化带来了不少麻烦。而使用Jmeter中的Beanshell postprocessor(Beanshell后置处理器),可以通过调用内部函数与对象,获取请求返回值,并再次加工。 引入合适的包 这里我使用alibaba的fastjson包,引用之前需要将对应的jar包放在 D:\apache-jmeter-5.3\lib\ext 目录下,如下图所示: 放好文件后,跟普通java文件一样import引入即可。 上代码 import com.alibaba.fastjson.JSONObject; //1.获取请求返回值,prev是Jmeter内置的对象,可以直接拿到返回值 String response = prev.getResponseDataAsString(); //2.将拿到的str转json JSONObject obj = JSONObject.parseObject(response); JSONObject data = (JSONObject) obj.get("data")
1 min read
Jmeter使用过程中的坑之Beanshell Map问题
自动化测试

Jmeter使用过程中的坑之Beanshell Map问题

报错信息 如下所示: > ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``import java.util.*; import cn.…………DataserverTool; String . . . '' Encountered "," at line 13, column 19. 搜索之后发现知乎上有个老哥的帖子有一模一样的问题 https://zhuanlan.zhihu.com/p/62500075 出问题的代码 如下所示: Map argsMap = new HashMap(); 最终才知道原因是beanshell
1 min read
Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数
自动化测试

Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数

1. 话不多说先上代码 //引入Argument相关的包 import org.apache.jmeter.config.Argument; import org.apache.jmeter.config.Arguments; //从sampler中获取参数 Arguments args = sampler.getArguments(); //将参数转化为Map方便使用,需要注意的是Jmeter中的Map不能有类型,否则会报错 Map argsMap = args.getArgumentsAsMap(); //从Map中获取想取得值 String xxx = argsMap.get("xxx"); //省略对值进行加密处理的代码 //增加参数 args.addArgument("sign",sign); args.addArgument("tm",tm); args.addArgument("nonceStr",newNonceStr); 2. 官方Javadoc文档 先把链接放在这里:
2 min read
Jmeter5.3字体大小修改(高分辨率设置)
自动化测试

Jmeter5.3字体大小修改(高分辨率设置)

摘要 jmeter的高版本已经支持高分屏了,但是默认情况下参数是没有启动高分屏支持的,存在在高分屏上UI太小的问题。下面介绍HiDPI的配置方法。 修改配置 打开: D:\apache-jmeter-5.3\bin\jmeter.properties (即jmeter压缩包中的bin目录中) 编辑以下几个字段(建议逐条搜索字段然后去掉注释并编辑对应的值,jmeter.properties中备注有每个字段的解释,可以自己读一下),编辑后保存,重新打开jmeter即生效。 jmeter.hidpi.mode=true jmeter.hidpi.scale.factor=2.0 jmeter.toolbar.icons.size=48×48 jmeter.tree.icons.size=48×48 jsyntaxtextarea.font.family=Hack jsyntaxtextarea.font.size=
1 min read
自动化测试

Selenium报错 Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'

报错信息如下: Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value' (Session info: chrome=65.0.3325.181) (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 10.0.16299 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or
自动化测试

selenium java maven 自动化测试(二) 页面元素获取与操作

在第一节中,我们已经成功打开了页面,但是自动化测试必然包含了表单的填写与按钮的点击. 所以在第二章中我以博客园为例,完成按钮点击,表单填写 话不多说,先上代码: package com.ryan; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Demo { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", ".\\tools\\chromedriver.exe"); WebDriver
2 min read
selenium java maven 自动化测试(一) helloworld
自动化测试

selenium java maven 自动化测试(一) helloworld

本教程使用selenium-java,简单的完成了网页访问 网页内容获取,表单填写以及按钮点击. 示例项目代码: https://github.com/Selenium-Java-Demo/Demo1.git 1. 使用maven构建项目 在pom中添加如下依赖: org.seleniumhq.selenium selenium-java 3.13.0 2. 下载对应版本的浏览器 driver, 仔细查看driver版本号要与本地浏览器版本号对应. 如本项目中使用chrome浏览器69版本. 对应的 ChromeDriver 2.41下载地址: https://www.seleniumhq.org/download/ 3. 项目编写java类 插入如下代码: package com.ryan; im
1 min read
自动化测试

TestNG+Maven+IDEA 自动化测试(一) 环境搭建

示例代码: https://github.com/ryan255/TestNG-Demo 所需环境: 1. IDEA UItimate 2. JDK 3. Maven 创建工程 1. 一开始创建一个普通的maven项目即可。下面展示的是最终完成的工程目录,其中创建res文件夹以及放入testNG.xml文件的步骤后面会提到: [https://ryan255.ltd/content/images/wordpress/2021/03/wp_editor_md_afa01baa5fde561b6b9136b85770fe37.jpg] 2. 在pom中添加依赖: org.testng testng 6.10 test 3. 创建package 与测试类 HelloTestNG直接粘贴官方demo,内容如下所示:
2 min read
Jmeter性能测试-如何精准控制每秒请求数之jp@gc - Throughput Shaping Timer的使用
自动化测试

Jmeter性能测试-如何精准控制每秒请求数之jp@gc - Throughput Shaping Timer的使用

本文参考了:https://www.cnblogs.com/yagao/p/12614175.html Throughput Shaping Timer 是用来控制吞吐量的定时器,通过延缓线程运行来整体控制取样器产生的RPS。 实际使用中: 1. 可以通过设置在不同吞吐量分别持续一段时间,考察系统在不同吞吐量情况下的稳定性 2. 可以通过设置随着时间持续增加的吞吐量,来探测系统吞吐量的的极限 举个例子: 1. 首先,创建一个线程组,这里我把线程数暂且设置为200,循环勾选为永远。在文章末尾解释为什么这样设置 2. 在线程组内增加一个HTTP请求,这里以百度举个例子 3. 加入Throughput Shaping Timer 定时器,设置起始终止RPS和持续时间,这里我采用了持续增加的方式。 4. 加入一个TPS监听器并执行测试看看效果,如下图所示: 随着时间的增加RPS逐步提升,实际的TPS也随之线性增长,说明目前还没有
3 min read
自动化测试

Jmeter性能测试-常用监听器的使用

1. jp@gc – Transactions per Second [/content/images/wordpress/2021/03/wp_editor_md_54d8413211287311ee1d4f7568aadf97.jpg] 定义: Transactions per Second就是我们常说的TPS,也就是事务数/秒。一个事物是指一个客户机向服务器发送请求后服务器做出反应的过程。 作用: TPS反应了系统在同一时间内处理业务的最大能力,这个数据越高,说明处理能力越强。TPS会受到负载的影响,也会随着负载增加而逐渐增加,当系统进入繁忙期后,TPS会有所下降。 局限性: 1. TPS是从客户端角度审视服务器处理能力,并不是说TPS可以达到什么程度就能支持多少并发或者支持多少用户(比如某系统一个业务需要10个事务,而另一个业务需要50个) 2. TPS = 脚本运行期间所有事物总数 / 脚本运行时长,如果使用集合点策略,在脚本执行前的等待时间过程中,服务器没有处理事务,那么这个时候的TPS和理想中的结果不一致 2
2 min read