在学习eclipse的java开发中,经常遇到不少的问题,而软件测试工具无疑是很好的工具。下面我就结合我在java项目当中的开发谈谈我对软件测试的理解以及软件测试工具使用的过程。
软件测试工具:Jmeter
一. 软件测试的必要性
测试活动需要花费大量的时间和成本,如果用手工测试,测试的效率非常低;而测试工具可以进行部分的测试设计、实现、执行和比较的工作。通过运用测试工具,可以达到提高测试效率的目的。
二. 软件测试的原则:
- 测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。
- 设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下还要制造极端状态和意外状态,如网络异常中断、电源断电等。
- 对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。
- 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
三. 安装选取的软件测试的工具:Jmeter
- 在Jmeter官网下载安装包
2.配置环境
新增变量JMETER_HOME,变量值:E:\developer\apache-jmeter-4.0
新增路径:%JMETER_HOME%\lib\jorphan.jar;
3.启动
配置好后,去安装目录下启动:点击jmeter.bat即可。
四. Jmeter组件介绍
1.测试计划:性能测试的所有内容是于基于一个计划
右键单击“测试计划”弹出菜单:
2. Threads (Users)线程
setup thread group :一种特殊类型的ThreadGroup的,可用于执行预测试操作
teardown thread group:一种特殊类型的ThreadGroup的,可用于执行测试后动作
thread group:一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户
3.测试片段: 测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级
4.取样器
性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元
5. 逻辑控制器:包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,另一类是用来组织可控制 sampler 来节点、
6.配置元件
配置元件(config element)用于提供对静态数据配置的支持
五. 1.测试自己软件中的一个类
public class Hello {
public String sayHello()
{
return "Hello";
}
public String sayHelloToPerson(String s)
{
if(s == null || s.equals(""))
s = "nobody";
return (new StringBuilder()).append("Hello ").append(s).toString();
}
public int sum(int a,int b)
{
return a+b;
}
}
2. 添加类perftest,并继承AbstractJavaSamplerClient,并添加代码如下:System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。
package com.test.webservice;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.test.webservice.Hello;
public class perftest extends AbstractJavaSamplerClient {
private String a;
private String b;
/** Holds the result data (shown as Response Data in the Tree display). */
private String resultData;
// 这个方法是用来自定义java方法入参的。
// params.addArgument("num1","");表示入参名字叫num1,默认值为空。
//设置可用参数及的默认值;
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1", "");
params.addArgument("num2", "");
return params;
}
//每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
}
//开始测试,从arg0参数可以获得参数值;
public SampleResult runTest(JavaSamplerContext arg0) {
a = arg0.getParameter("num1");
b = arg0.getParameter("num2");
SampleResult sr = new SampleResult();
sr.setSampleLabel( "Java请求哦");
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
Hello test = new Hello();
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer
.parseInt(b)));
if (resultData != null && resultData.length() > 0) {
sr.setResponseData("结果是:"+resultData, null);
sr.setDataType(SampleResult.TEXT);
}
// System.out.println(resultData);
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
//测试结束时调用;
public void teardownTest(JavaSamplerContext arg0) {
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
}
// main只是为了调试用,最后打jar包的时候注释掉。
/*
public static void main(String[] args)
{ // TODO Auto-generated method stub
Arguments params = new Arguments();
params.addArgument("num1", "1");//设置参数,并赋予默认值1
params.addArgument("num2", "2");//设置参数,并赋予默认值2
JavaSamplerContext arg0 = new JavaSamplerContext(params);
perftestbbb test = new perftestbbb();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
*/
}
4.Export为Runnable Jar File:hello.jar
5.将此hello.jar包放入JMETER_HOME\lib\ext目录;
6.打开JMeter,添加线程组,添加Java请求,查看结果树。
7.JMeter默认实现了两个Java Request Sampler:SleepTest Sampler和JavaTest Sampler,avaTest Sampler不向服务器发送数据请求,一般被用作调试目的使用。
8.测试项目中的http接口
添加http Request(线程组右键-添加-Sampler):对于jMeter而言,sampler取样器是与服务器交互的单元,一个取样器通常进行三部分的工作,向服务器发送请求;记录服务器的响应数据;记录相应时间信息。
一个HTTP请求的配置参数介绍如下:
名称:标识一个取样器,一般建议适用有意义的名字,如接口名称。
注释:仅用户记录注释信息。
服务器名称或IP:HTTP请求发送的目标服务器名称和IP地址,可以取用户定义的变量$(host)
端口:目标服务器端口号,可以取用户定义的变量$(port)
协议:向目标服务器发送的HTTP请求时的协议,可以是http(默认)或https
方法:发送HTTP请求的方法,包括GET,POST,HEAD,PUT,OPTIONS,TRACE,DELETE等
Content encoding:内容编码方式,默认iso8859,可以设置UTF-8
9.添加响应断言(被测http request右键-添加-断言):设置检查点,添加对响应结果的正则表达式判断即可
查看结果树:可以定义返回结果的排版,如果JSON格式。
查看聚合报告:
Label:显示jMeter的每个element(如,http request)都有一个Name属性
#Samples:表示这次测试中一共发出了多少请求,如模拟10个用户,每个用户循环10次,这里就显示100
Average:平均响应时间--默认情况下是单个request的平均响应时间,当使用了Transaction controller时也可以以Transaction为单位显示平均响应时间。
Median:中位数,也就是50%用户的响应时间
90% Line:90%用户的响应时间。
注:关于90%和50%的并发用户数的含义可参考:http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小响应时间
Max:最大响应时间
Error%:本次测试出现的错误的请求数量/请求的总数
Throughtput:吞吐量---默认情况下表示每秒的请求数(Request per second),当使用了Transaction Controller时,可以表示类似Loadrunner的Transaction per second数。
KB/Sec:每秒从服务器接收到的数据量,相当于Loadrunner中的Throughtput/Sec
以上基本就是我在java学习中进行的一个小的测试,至于该测试软件的进一步学习,等以后有时间继续。