Jmeter 安装教程

Jmeter测试工具

1.安装

(1).安装JDK,并配置JDK环境变量。

(2).验证JDK,cmd下输入java -verison如果能看到java版本信息,说明JDK安装成功。

(3).解压apache-jmeter-3.1.zip,并设置环境变量。

在环境变量里面的path里面加入jmeter的路径。比如:

F:\setup\normal\jmeter\apache-jmeter-3.1\bin

(4).运行jmeter,在cmd下输入jmeter

2.主要组件介绍

(1).测试计划

测试计划是使用Jmeter进行测试的开始,是其他测试原件的容器。给测试计划取一个有含义的项目名称,取名后进行保存,如下图:

(2).线程组

名称:为线程组设置有含义的名称,比如用户登录,用来测试用户登录的接口。

线程属性-线程数:设置发送请求的用户数,即并发数。

线程属性-Ramp-Up Period(in seconds):线程间的时间间隔,单位是秒。

线程属性-循环次数:请求的循环执行次数。如果勾选后面的“永远”,那么请求将一直循环发送。

(3). Sampler(HTTP请求)

名称:为HTTP请求设置一个有含义的名称,比如正确的用户名登录测试。

Web服务器:服务器名称或IP地址、端口号,比如80

HTTP请求:请求的方法,一般是POST或GET

路径:接口路径的IP地址后面的部分路径,比如freshO2O/login.action

同请求一起发送参数:请求中的参数与值,比如account=fu

password=123456

(4).监听器

监听器负责收集测试结果,并给出结果显示方式。常用的包括:查看结果树和聚合报告,都支持将结果写入文件。还有图形结果,概要结果,表格结果等监听器。

(5).断言

断言可用来判断请求响应的结果是否如用户所预期的,即在确保功能正确的前提下执行接口或压力测试,因此断言对于有效的测试是很有必要的。

3.接口测试示例

现在以菜篮子的用户登录接口测试的例子演示怎么用jmeter来进行接口测试。

用户登录接口测试

(1).接口文档

(2).设计测试用例

a.正常参数

account=fu password=123456

b.异常参数,比如用户密码错误。

account=admin password=123456

(3). jmeter设置

a.新建测试计划,名字为:菜篮子接口测试。

b.在测试计划上添加线程组,名字为:用户登录接口测试。

c.在线程组上添加2个采样器,即2个测试用例,类型选择HTTP请求。

第一个名字为:正常用户登录,第二个为异常用户登录,分别输入IP地址,端口号与路径,方法选择POST,并添加对应的参数。

d.添加断言,选择响应断言,正常用户登录用例包含关键字:"result":"ok"

异常用户登录用例包含关键字:"result":"error"

e.添加查看结果树添加->监听器->察看结果树

f.添加聚合报告添加->监听器->聚合报告

(4).运行测试并查看结果,点击绿色小三角图标,通过察看结果树与聚合报告确认结果,察看结果树是绿色表示测试成功,红色表示测试失败。如下图,测试成功。

Requests库

requests库提供python代码接口,方便通过HTTP请求来访问服务器获取数据。

1.安装requests

(1).解压requests包

cd解压目录

(2).安装requests

python setup.py install

运行python IDLE,在python命令行输入import requests验证结果。

2. requests的简单使用

import requests

print(r.status_code)

print(r.headers[‘content-type’])

3.使用说明requests的官方文档网址:

http://docs.python-requests.org/en/latest/user/quickstart/

使用requests之前都需要加载requests, import requests

(1).发送http请求

a.发送get请求

r=requests.get('http://httpbin.org/ip')

说明:r是一个变量名,对应的是一个response的对象,get方法需要一个参数,参数为完整的网址或IP地址的路径,获取http请求的响应结果。

b.发送post请求

r =requests.post('http://httpbin.org/post', data={'name': 'leo'})

说明:r是对象变量,保存获取的结果,第一个参数是网址,第二个参数data是参数名,{‘name’:‘leo’}是具体的参数值。

(2).构造请求参数url

d = {'key1': 'value1', 'key2': 'value2'}

r = requests.get('http://httpbin.org/get', params=d)

print(r.url)

说明:先定义一个字典,字典有参数名与参数值组成,第一个参数是网址,第二个参数是字典数据,结果得到网址与参数数据,把结果保存到r,r的值为:http://httpbin.org/get?key2=value2&key1=value1

(3).获取响应正文内容

response.text可以获取响应的正文文本内容

r =requests.get('http://httpbin.org/ip')

print(r.text)

输出结果:{"origin":"183.39.86.191"}

(4).Json响应正文

如果响应正文是一json串,可以使用Response.json()方法对响应正文进行json decode操作,并返回一个字典。

r =requests.get('http://httpbin.org/ip')

d = r.json()

print(d)

print(d['origin'])

输出:

{'origin': '183.39.86.191'}

183.39.86.191

如果响应正文不是一个json串,则会报错。

(5).响应数据状态值

Response对象的status_code属性标识http请求响应的状态码:

r = requests.get('http://httpbin.org/get')

print(r.status_code)

(6).响应的头信息

Response对象的headers属性是一个字典,可以获得http响应结果的头部的相关信息:

r = requests.get('http://httpbin.org/headers')

print(r.headers)

输出:

{'X-Powered-By': 'Flask', 'Via': '1.1 vegur','Access-Control-Allow- Credentials': 'true', 'Connection': 'keep-alive', 'Content-Type':'application/json', 'Access-Control-Allow-Origin': '*', 'Content-Length':'185', 'Server': 'meinheld/0.6.1', 'X-Processed-Time': '0.000865936279297','Date': 'Sat, 17 Jun 2017 05:26:01 GMT'}

(7).定制请求头信息

Requests支持定制http请求的头部。为此,我们只需要构造一个字典,然后传给requests.get()的headers参数即可。

url = 'http://httpbin.org/headers'

headers = {'user-agent': 'my-app/0.0.1'}

r = requests.get(url, headers=headers)

print(r.text)

输出结果:{

"headers": {

"Accept": "*/*",

"Accept-Encoding": "gzip, deflate",

"Connection": "close",

"Host": "httpbin.org",

"User-Agent": "my-app/0.0.1“}}

(8).以form表单形式发送post请求

Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

url = 'http://httpbin.org/post'

d = {'key1': 'value1', 'key2': 'value2'}

r = requests.post(url, data=d)

print(r.text)

说明:d = {'key1': 'value1', 'key2': 'value2'}以form表单的形式提交到服务端,服务端返回的form字段即是提交的数据。

(9).以json形式发送post请求,可以将一json串传给requests.post()的data参数,

url = 'http://httpbin.org/post'

s = json.dumps({'key1': 'value1', 'key2': 'value2'})

r = requests.post(url, data=s)

print(r.text)

(10).以文件形式发送post请求

requests也支持以文件形式发送post请求,只需将一文件传给requests.post()的files参数即可。

在d盘下编辑文件report.txt,文件内容为:Hello world!

url = 'http://httpbin.org/post'

f = {'file': open('d:\\report.txt', 'rb')}

r = requests.post(url, files=f)

print(r.text)

(11).获取响应的cookies信息

r.cookies是响应cookies的字典,通过r.cookies可得到响应带上的cookies。

r = requests.get(url)

print(r.cookies)

(12).发送带cookies的请求

url= 'http://httpbin.org/cookies'

cookies= {'cookies_are': 'working'}

r= requests.get(url, cookies=cookies)

print(r.text)

输出结果:

{

“cookies”: {

“cookies_are”:“working”

}

}

(13).请求的超时设置

Requests允许对一个http请求设置超时的时间,只需要在requests.get()或者requests.post()方法的timeout参数设置一个值(单位为秒)即可。

url = 'http://httpbin.org/get'

r = requests.get(url, timeout=0.001)

如果设置时间太短,很容易产生异常,比如这个例子,0.001时间太短。

(14).异常在发送http请求时,由于各种原因,requests可能会请求失败而抛出异常。常见的异常包括:

ConnectionError由于网络原因,无法建立连接。

HTTPError如果响应的状态码不为200,Response.raise_for_status()会抛出HTTPError异常。

Timeout超时异常。

TooManyRedirects若请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。

所有requests抛出的异常都继承自requests.exceptions.RequestException类。

4.接口测试

通过requests调用接口非常简单,我们再用菜篮子用户登录的接口的例子,编写代码进行测试。

import requests

url="http://192.168.119.131:80/freshO2O/login.action"

d= {'account': 'fu', 'password': '123456'}

r= requests.post(url, data=d)

result=r.json()

print(result)

assert(result['result']=='ok')

说明:这个接口调用的方法是post,返回结果为json数据,最后用assert来做断言,判断result['result']是否与'ok'相等,如果不等,则返回异常。

或长按下方二维码

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180602B0KKPH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券