首页 > 技术文章 > 接口测试03-jmeter实操

zhangyangcheng 2020-04-04 10:21 原文

如何用jmeter做接口测试?

首先要添加线程组:测试计划右键--添加--Threads(Users)--线程组(所有的操作都属于一个线程

1、 设计操作步骤:添加HTTP请求

线程组右键——添加——Sampler(取样器)——HTTP请求

2、 执行,添加一个察看结果树

线程组右键——添加——监听器——察看结果树

点击上面绿色三角符号进行运行,下面Text :HTTP请求,点进去看看(取样器结果、请求、响应数据)

3、 断言,添加一个响应断言

线程组右键——添加——断言——响应断言

输入10022

4、 添加一个断言结果

线程组右键——添加——监听器——断言结果

只显示HTTP请求,说明上面的响应断言判断是对的。如果错误会显示错误信息。

5、参数化:添加csv数据文件设置

线程组右键——添加——配置元件——CSV Date Set Config

设计数据用例:由于jmeter只支持CSV文件,所以设计测试用例时记得生成CSV格式的,将CSV导入到jmeter中(这部分在性能测试里面叫做jmeter的参数化)

6、 添加一个HTTP Cookie管理器

线程组右键——添加——配置元件——HTTP Cookie管理器

7、 添加一个正则表达式提取器

正则表达式提取器:(open的HTTP请求)右键——添加----后置处理器---正则表达式提取器。一般配合fiddler抓包使用。

场景:访问两个url。访问第一个url,返回usersession。访问第二个url,带着usersession参数访问。

两个HTTP请求平级,第一个为open打开HTTP,第二个为login登陆HTTP。在第一个HTTP下面一级增加正则表达式提取器。

小总结:

1. 添加线程组HTTP请求察看结果树就能构建最简单的接口测试。

2.响应断言断言结果是配套使用的。

3.CSV数据文件设置是为了参数化。

4.HTTP Cookie管理器是保存和发送cookie信息。应用场景:在需要登陆情况下的操作。 

 

 一、jmeter工具测试接口时使用步骤:

启动jmeter工具:需要双击打开电脑桌面jmeter.bat 图标。

首先要添加线程组:测试计划右键--添加--Threads(Users)--线程组(线程数就是并发数)

1、添加HTTP请求(线程组右键——添加——Sampler(取样器)——HTTP请求)

HTTP请求页面:

填写服务器名称(域名)或IP

端口号:默认80,可以不写

选择请求方式:get

路径:输入接口url域名后面的路径

Parameters:以及?后面的参数及值

最上面的请求名称可以进行修改。点击上面的运行按钮去查看。

2.添加csv数据文件设置:线程组右键——添加——配置元件——CSV Date Set Config(后面的参数化三种的一种)

3、添加一个响应断言(线程组右键——添加——断言——响应断言)

4、执行,添加察看结果树(线程组右键——添加——监听器——察看结果树)

查看:点击上面的运行按钮,查看返回值

 5、添加断言结果:线程组右键——添加——监听器——断言结果

6、添加HTTP cookie管理器

说明:HTTP Cookie 管理器就像一个 web 浏览器那样存储并发送 cookie。

如果你有一个 HTTP 请求,其返回结果里包含一个 cookie,那么 Cookie 管理器会自动将该 cookie 保存起来,而且以后所有的对该网站的请求都使用同一个 cookie。

 

需要添加HTTP cookie管理器的应用场景:

在接口测试的应用场景中,一般对业务的操作都是基于用户登录情况下的操作。

比如:访问个人主页需要登陆的用户操作。就是登录成功后,获取登录成功后的Cookie的信息,然后在访问个人主页的时候,在请求头中带上Cookie的信息,已证明用户是登录成功后的操作。这时就需要添加 HTTP

cookie管理器来保存和发送cookie。

HTTP Cookie管理器实例:https://www.sohu.com/a/273255425_658944

 

页面查看cookie信息:右键——检查——Network——Headers——Request Headers

添加HTTP cookie管理器:

线程组(添加)-----配置元件----HTTP Cookie 管理器

一般要加到最前面就行,其他什么都不用写。(这里其实用不上。)

 

 二、接口测试的情况

聚合数据:https://www.juhe.cn/ucenter/account

选择:我的接口----AppKey(后面要添的)----接口(点击)

 看API文档:

看错误码参照:

 

1、get请求方式:

接口地址:http://v.juhe.cn/weather/index

使用步骤:

1)填写HTTP请求页面

服务器名称(域名)或 ip:v.juhe.cn

端口号:没写,默认80

协议:http

方法:GET

路径:/weather/index

Parameters(参数)

cityname 上海

key 32d1b2ada7885afbb3a0a516d9298bf

 2)选择察看结果树-----点击(上面绿色)三角形:开始运行程序--------点击两把扫帚:清除下面的结果

查看:   点击下面的HTTP请求-----响应数据(可以根据这里面的数据进行断言)例如:error_code:10001

有可能会遇到这样的问题:报了一个下面的错,没有显示上面的响应数据。

原因是它的接口参数升级了:cityname参数需要编码后传过去。

 

解决办法:把第一个参数(cityname)后面的小勾勾上就好了。

小技巧:点击下面的HTTP请求-----请求:(GET方式参数是放在url里的,排错的时候,也可以把这个地址放在浏览器运行)

 

3)响应断言:测结果可包含10001,输入10001即可。

4)断言结果:下面只显示HTTP请求。说明上面的响应断言判断的是对的。如果响应断言判断错误,下面就会出现错误信息。

例如:在响应断言中输入:10002。看断言结果就显示响应断言失败,10002不在里面。

 

2、post请求方式:

接口地址:http://v.juhe.cn/weather/geo

使用步骤:

1)填写HTTP请求页面

服务器名称(域名)或ip:v.juhe.cn

端口:不写,默认80

协议:http

方法:POST   

路径:/weather/geo

Parameters

lon 116.39277
lat 39.933748
dtype json
key 32d1b2ada7885afbb3a0a516d9298bf

2)察看结果树:运行三角形。就有下面的。error_code:10001。是key值错了。(因为请求次数有限,所以故意写错。)参数写错,也是一个测试用例。

 可以看出:post请求参数是和url分开的,放在Post  data里面的。

小小总结:

1  在jmeter中,不管是GET请求还是POST请求。HTTP请求中必填的参数分别是:

1) 服务器名称或IP       2) 端口号(不写,默认是80)        3 )协议       4)方法      5)路径     6) 参数

(唯一区别:get请求的方法是GET   post请求的方法是POST)

2  get请求,请求参数是拼接放在url中       post请求,请求参数是放在请求体中

(但不管怎样,都不影响写参数)

 

3 参数化

当使用JMeter进行测试时,往往是需要大量不同的测试数据,这时候就可以通过参数化来实现。

我的理解,就是将脚本中的某些输入值使用参数来代替,在下次使用的时候,只需要修改输入值既可。

 
参数化是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则。
 
 
下面三种方式都可以读取txt,csv类型数据(就是以.txt和.csv结尾的文件)。(都是访问vm上TT的项目。)
 
1.csv控件
添加----配置元件-----Csv Date Set Config

使用场景:适合参数范围比较大的时候,可以方便用户随时修改参数数据。使用最多的就是参数化用户名和密码登录系统。

 
2.函数助手读取文件
选项-----函数助手对话框----_CSVRead函数

使用场景:可作为其他参数化方式的补充项,如:随机数生成的函${__Random(,)}

比如:随机数,可用于固定字符+随机数,修改传入参数的值

假如邮箱是163的,则用户名参数的值直接填入:${__Random(1,5,)}@163.com。我测试的邮箱是内网测试用的域名是180chen.cn,则填写${__Random(1,5,)}@180chen.cn

因为@察看结果树显示不出来,为了结果比较明显,就直接去掉@了

 

这里2就是变化的,每次都是1-5不一样的。所以每次都是随机数(1-5)加固定字符(180chen.cn)的拼接。

 

 

3.通过用户参数设置数据
 添加----前置处理器----用户参数

 使用场景:适用于参数取值范围很小的时候使用。一般会将登录的用户账号和密码作为用户参数

 
运行项目,想要vm上运行项目,windows上可以访问
1)输入下面代码:
python manage.py runserver 0.0.0.0:8000
2)输入ifconfig,查看ip
 

3) 在windows浏览器输入:http://192.168.44.133:8000/index  就可以访问了。

 

参数化可以是txt文件和csv文件。下面是都是以txt文件为例。但是也要会csv文件。先说怎么创建csv文件?

csv文件和txt文件的参数化使用方法是一模一样的。

1.新建——文本文档

每个字段之间都要用逗号隔开

2.文件——另存为

在打开的另存为对话框里,保存类型选择【所有文件(*.*)】,然后在文件名称那里填写:名称.csv,然后点击保存,如下图所示。

csv文件就完成了。

打开csv文件,打开方式-----记事本打开就可以了。也可以双击。默认是excel打开的。很多种都支持。

 

方式一、csv控件

步骤如下:

  • 1.添加csv数据文件设置(配置元件)
  • 2.csv中填写用数据路径和变量名(变量名随便起的)
  • 3.http中填写参数值:${变量名}
  • 4.线程组:循环次数设置3次。(按文件行数来读取数据

1)选中线程组--->配置元件--->CSV Data set config

2)CSV Date Set Config :填写数据路径和变量名

Filename:G:\2020软件测试代码\3_接口及性能测试\接口测试\day2/data1.txt   (数据路径)

变量名:user name(随便取得)

变量名之间用英文逗号隔开

3)HTTP请求中:使用${变量名}来读取文件每一列内容。服务器名称或IP:192.168.44.133------端口:8000(这里一定要添的) ------username:${user}   pwd:${name}

4)data1.txt: 第一行:user读的是:zyc  name读的是:123456;第二行:user读的是hjhf   name读的是232;依次类推。(注意:通过文件的行数来决定读取内容)

5)通过配置元件读取CSV:线程组:设置循环次数,3次。

 

6)查看:察看结果树,有三个HTTP请求。这里红色的没关系,因为是我没开启TT项目,所以就不能访问。只要看发送的username  pwd获取的数据。

 

 

 

补充:HTTP Cookie管理器,一般要加到最前面就行,其他什么都不用写。(这里其实用不上。在需要自动管理cookie和手动管理cookie时用。)

他可以像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,cookie manager会自动存储该请求的cookies,并且后面如果发送同源站点的http请求时,都可以用这个cookies。每个JMeter线程都有自

己的“cookie存储区域”。

现在对于JMeter来说,一个测试计划只能有一个cookie管理器。因为当多个magager存在时,JMeter目前还没有方法来指定使用那个manager。同时,一个cookie manager中的存储的cookie也不能被其他cookie

manager所引用,所以同一个计划中不建议使用多个cookie manager

 

 

方式二、通过函数助手读取csv、txt文件

步骤如下:

  • 1.选项---函数助手对话框---CsvRead函数
  • 2.填写csv文件的位置,读取的第几列(从0开始),点击生成。
  • 3.复制到http的参数值:也是${变量名}
  • 4.线程组:线程数设置3次(按不同用户读取文件内容

1)选项菜单-->函数助手对话框--->__CSVRead函数

2)CSV文件的位置:G:\2020软件测试代码\3_接口及性能测试\接口测试\day2\data1.txt  

3)按照上图1-2-3的步骤

操作:4中填写文件的位置,5中填写要读取的列的位置,第一列为0。点击【生成】按钮,拷贝字符串,去HTTP请求中替换要参数化的值。

4)注意:函数助手是按照不同用户读取文件内容

5) 查看:察看结果树

补充:使用随机函数生成密码(实际中密码应该是用户设置的,要符合很多条件,这里只是单纯的学一下随机函数的使用。)

1.选项----函数助手对话框----_Random函数

填写最小值,最大值,生成,复制。

 

 2.将密码这里修改就行

 3.察看结果树:密码生成3个不同的密码。100-1000之间的随机数

方式三、通过用户参数设置数据

步骤如下:

  • 1.添加用户参数(前置处理器)
  • 2.添加用户和变量构造多条数据
  • 3.线程组:线程数设置为3(按不同用户读取文件内容
  • 4.http中填写变量:${变量名}

1)选中线程组--->添加前置处理器中的用户参数选项

2)通过添加变量和用户来构造多条数据

3)注意:是由不同的用户决定读取的内容

 4)HTTP请求中也是写变量。

 5) 查看:察看结果树

 


 

推荐阅读