软件质量保证与软件测试-大作业(参考模板案例)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

天津工业大学
2017级软件质量保证与软件测试
大作业
项目名称:
专业方向:
专业班级:
姓名:
目录
一、引言 (1)
1.1项目概述 (1)
1.2运行环境 (1)
二、黑盒手工测试 (3)
3.1测试需求 (3)
3.2测试用例设计 (4)
3.3测试执行与缺陷记录 (5)
3.4测试总结 (7)
三、项目自动化测试 (8)
4.1自动化测试需求分析 (8)
4.2自动化测试设计 (8)
4.2.1测试用例 (8)
4.3自动化测试执行 (9)
4.4自动化测试总结 (15)
四、性能测试 (16)
5.1 性能测试需求分析 (16)
5.2 性能化测试设计及执行 (16)
5.3脚本参数化 (22)
5.4测试执行 (23)
5.4.1设置运行环境 (24)
5.4.2系统资源监控设置 (27)
5.4.3执行结果 (28)
5.5摘要分析 (30)
5.6windows资源 (40)
5.7 性能测试执行结果及总结 (47)
五、总结与展望 (48)
一、引言
1.1项目概述
本次实训共使用两款系统,分别为在黑盒测试中以及原型开发中使用到的测评项目管理系统,和性能测试以及自动化测试使用到的医药管理系统。

各系统具体内容如下:
测评项目管理系统主要负责控制测试工作的任务量,共提供3种角色:系统管理员、项目管理员、责任专家。

每个角色具有相应的权限。

该系统主要包括以下功能:
1)测试任务管理:完成接收测试任务申请、下达任务、启动测试功能;
2)测试过程管理:管理已下达测试项目的测试技术文档和审查意见;
3)项目审查管理:管理项目审查计划和审查会记录;
4)项目信息查询:查询项目状态及其项目信息;
5)系统管理:对本系统的用户和组织机构信息进行管理;
6)基础信息管理:维护参与测评项目活动的相关单位及其人员信息;
7)系统监控:记录系统操作日志。

医药管理系统主要负责管理顾客、经办人和药品信息。

可以创建多条用户统一对资源进行管理。

该系统主要包括以下功能:
1)信息查询:查询顾客、经办人和药品信息;
2)信息录入:录入顾客、经办人和药品信息;
3)信息删除:删除顾客、经办人和药品信息;
4)信息修改:修改顾客、经办人和药品信息;
5)信息浏览:浏览顾客、经办人和药品信息;
6)数据报表:打印顾客、经办人和药品信息;
7)用户管理:添加、编辑、删除用户信息;
8)系统帮助:提供关闭全部窗口和系统帮助提示功能。

1.2运行环境
表1-1 电脑环境
二、黑盒手工测试
3.1测试需求
1.软件概述
测评项目管理系统主要负责控制测试工作的任务量,共提供3种角色:系统管理员、项目管理员、责任专家。

每个角色具有相应的权限。

该系统主要包括以下功能:
1)测试任务管理:完成接收测试任务申请、下达任务、启动测试功能;
2)测试过程管理:管理已下达测试项目的测试技术文档和审查意见;
3)项目审查管理:管理项目审查计划和审查会记录;
4)项目信息查询:查询项目状态及其项目信息;
5)系统管理:对本系统的用户和组织机构信息进行管理;
6)基础信息管理:维护参与测评项目活动的相关单位及其人员信息;
7)系统监控:记录系统操作日志。

2.测试环境
表3-1 软硬件测试环境
3.测试范围
表3-3 测试范围
附:本次测试的测试计划如下:
3.2测试用例设计
本次黑盒手工测试用例包括基础信息管理模块中的单位信息管理和人员信息管理及以下的三级模块。

针对以上测试内容共编写测试用例30个,如图3-1和表3-3所示,具体内容见禅道ztt001用户。

表3-4 黑盒测试用例案例
3.3测试执行与缺陷记录
黑盒手工测试用例包括基础信息管理模块中的单位信息管理和人员信息管理及以下的三级模块以及其他相关功能一共执行测试用例36个,通过14个,不通过22个。

测试过程中发现的缺陷共15个,如下表3-4所示。

表3-5 测试问题汇总
3.4测试总结
针对测评项目管理系统的黑盒测试工作基本结束,本次黑盒测试主要针对其功能性、可用性、易用性进行测试。

测试过程为:编写测试计划、编写测试用例、执行测试用例、提交Bug、最终根据测试结果编写测试报告以及测试问题报告。

本次由小组分工对该系统的基础信息管理进行手工测试,并使用禅达对测试内容进行管理。

在测试过程中,将各个功能编写成两个测试用例,一是正确判断,二是错误判断,有利于对测试用例进行管理。

最终共编写测试用例36个,通过14个,不通过22个,bug数15个。

通过这次的实训课程,进一步的熟悉黑盒测试过程,梳理测试逻辑,提高测试效率,为优质的软件质量做好充分的准备。

黑盒测试是软件测试的基础,是提升专业技能的基石,只有做好基础工作,才能在以后的道路上走得更加平稳且游刃有余,
三、项目自动化测试
4.1自动化测试需求分析
本次自动化测试选择医药管理系统,对顾客信息的录入、查询、修改进行脚本的录制。

使用火狐54.0版本来承载selenium IDE 进行测试,保证能够成功回放上述功能。

4.2自动化测试设计
4.2.1测试用例
表4-2 查询顾客信息功能的测试用例
表4-3 修改顾客信息功能的测试用例
表4-4 录入顾客信息功能的测试用例
4.3自动化测试执行
//顾客信息录入
package test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
public class Add {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new WebDriver();
baseUrl = "http://192.168.1.125:8080/mms/";
((Object) driver).manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testAdd() throws Exception {
driver.get(baseUrl + "/mms/");
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("admir");
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys("1234");
driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
driver.findElement(By.xpath("//div[2]/div/div[2]/div/div")).click();
driver.findElement(By.xpath("//div[@id='EC']/a/span/span")).click();
driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).clear(); driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).sendKeys("03"); driver.findElement(By.xpath("//form[@id='ECMform']/div/div[3]/span/span/a")).click(); driver.findElement(By.xpath("//tr[5]/td[4]")).click();
driver.findElement(By.xpath("//form[@id='ECMform']/div/div[3]/span[2]/span/a")).click(); driver.findElement(By.id("_easyui_combobox_i3_11")).click();
driver.findElement(By.xpath("//form[@id='ECMform']/div/div[2]/span[3]/span/a")).click(); driver.findElement(By.id("_easyui_combobox_i2_11")).click();
driver.findElement(By.linkText("录入")).click();
driver.findElement(By.xpath("//div[3]/a/span/span")).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
//顾客信息查询
package test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class require {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer(); @Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://192.168.1.125:8080/mms/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testRequire() throws Exception {
driver.get(baseUrl + "/mms/login.html");
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("admir");
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys("1234");
driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
driver.findElement(By.cssSelector("div.panel-title.panel-with-icon")).click();
driver.findElement(By.cssSelector("span.l-btn-text")).click();
driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).clear(); driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).sendKeys("02"); driver.findElement(By.cssSelector("span.l-btn-icon.icon-ok")).click();
driver.findElement(By.cssSelector("a.panel-tool-close")).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
//顾客信息修改
package test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class Alt {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://192.168.1.125:8080/mms/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testAlt() throws Exception {
driver.get(baseUrl + "/mms/login.html");
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("admir");
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys("1234");
driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
driver.findElement(By.xpath("//div[4]/div/div")).click();
driver.findElement(By.xpath("//div[@id='MC']/a/span/span")).click();
driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).clear();
driver.findElement(By.cssSelector("input.textbox-text.validatebox-text")).sendKeys("02");
driver.findElement(By.linkText("查询")).click();
driver.findElement(By.cssSelector("textarea.textbox-text.validatebox-text")).clear();
driver.findElement(By.cssSelector("textarea.textbox-text.validatebox-text")).sendKeys("111");
driver.findElement(By.cssSelector("h1")).click();
driver.findElement(By.xpath("//div[3]/a/span/span")).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
4.4自动化测试总结
Selenium是专为web测试而设计的一款软件,相对于uft而言更能适用于不同的浏览器且依附于浏览器中的IDE组件操作更为简易。

使用IDE录制完测试脚本后,保存为java脚本格式,导入eclipse当中,进行进一步的调试过程。

自动化测试应当是在回归测试以及功能性测试完毕后,待系统相对稳定的情况下进行更有效的测试,但由于本次实践仅针对于自动化测试,所以在此省略前两项测试类型。

然而,在使用selenium测试医药管理系统时依然存在着显而易见的错误功能点。

此外,由于系统的不够稳定,造成了回放过程中,时能成功时而不能成功的问题。

有时因为不能寻找到元件而报错停止运行,这时候需要加入wait代码行,给界面充分的加载时间。

最终导致回放过程中,要花费比手工测试更多的时间,这恰恰违背了自动测试高效率的基本特性。

四、性能测试
5.1 性能测试需求分析
使用LoadRunner对系统的添加经办人信息、查询经办人信息、删除经办人信息三个功能点进行负载测试,并给100、200、300的虚拟用户量,观察不同虚拟用户数下的响应时间以及CPU瓶颈、内存泄漏。

在互联网上对于用户响应时间,有一个普遍的标准,2/5/10秒原则。

也就是说,在2秒之内响应被用户认为是“非常有吸引力”的用户体验。

在5秒之内响应被用户认为是“比较不错”的用户体验,在10秒之内响应被用户认为是“糟糕”的用户体验。

如果超过10秒还没有得到响应,那么大多用户会认为这次请求是失败的。

通常响应时间在4秒之内,大部分用户可以接受;4-8秒以内,30%的用户选择离开;8-9秒,则有60%的用户选择离开;超过10秒,则90%以上的用户选择离开。

系统的整体测试性能标准可以参考如下:
(1)事务的的响应时间<=5秒。

(2)%Processor time的值小于90%。

(3)Processor Queue Length的值小于2。

(4)Available Mbytes 的值大于4。

5.2 性能化测试设计及执行
1. 查询顾客信息脚本
require()
{
//访问网址为:http://192.168.1.125:8080/mms/
web_url("mms",
"URL=http://192.168.1.125:8080/mms/",
"Resource=0",
"Referer=",
"Mode=HTTP",
LAST);
//思考时间为6秒
lr_think_time(6);
//admir用户登陆脚本
web_submit_data("loginUser",
"Action=http://192.168.1.125:8080/mms/Login/loginUser",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
ITEMDATA,
"Name=username", "Value=admir", ENDITEM,
"Name=password", "Value=1234", ENDITEM,
LAST);
web_url("index.html",
"URL=http://192.168.1.125:8080/mms/mms/index.html",
"Resource=0",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
LAST);
web_url("GetLoginName",
"URL=http://192.168.1.125:8080/mms/Login/GetLoginName",
"Resource=1",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t1.inf",
LAST);
//查询顾客信息事件开始
lr_start_transaction("consumer-require");
//设置集合点,名为“require”
lr_rendezvous("require");
//思考时间为“36”
lr_think_time(36);
web_url("Search.html",
"URL=http://192.168.1.125:8080/mms/mms/tabs/client/Search.html?_=1558920115001", "Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t2.inf",
"Mode=HTTP",
LAST);
lr_think_time(6);
web_submit_data("GetClient",
"Action=http://192.168.1.125:8080/mms/Client/GetClient",
"Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t3.inf",
"Mode=HTTP",
ITEMDATA,
"Name=cno", "Value={NewParam}", ENDITEM,
LAST);
//查询顾客信息事件结束
lr_end_transaction("consumer-require",LR_AUTO);
return 0;
}
2. 修改顾客信息脚本
alter()
{
//访问网址为:http://192.168.1.125:8080/mms/
web_url("mms",
"URL=http://192.168.1.125:8080/mms/",
"Resource=0",
"Referer=",
"Mode=HTTP",
LAST);
//思考时间为“8”
lr_think_time(8);
web_submit_data("loginUser",
"Action=http://192.168.1.125:8080/mms/Login/loginUser",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
ITEMDATA,
"Name=username", "Value=admir", ENDITEM,
"Name=password", "Value=1234", ENDITEM,
LAST);
web_url("index.html",
"URL=http://192.168.1.125:8080/mms/mms/index.html",
"Resource=0",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
LAST);
web_url("GetLoginName",
"URL=http://192.168.1.125:8080/mms/Login/GetLoginName",
"Resource=1",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t1.inf",
LAST);
//修改顾客信息事件开始
lr_start_transaction("consumer-alter");
//设置集合点,名为“alter”
lr_rendezvous("alter");
//思考时间为15秒
lr_think_time(15);
web_url("Modify.html",
"URL=http://192.168.1.125:8080/mms/mms/tabs/client/Modify.html?_=1558922542090", "Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t2.inf",
"Mode=HTTP",
LAST);
web_submit_data("GetAllAgency",
"Action=http://192.168.1.125:8080/mms/Agency/GetAllAgency",
"Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t3.inf",
"Mode=HTTP",
ITEMDATA,
LAST);
web_submit_data("GetAllMedicine",
"Action=http://192.168.1.125:8080/mms/Medicine/GetAllMedicine",
"Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t4.inf",
"Mode=HTTP",
ITEMDATA,
LAST);
lr_think_time(4);
web_submit_data("GetClient",
"Action=http://192.168.1.125:8080/mms/Client/GetClient",
"Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t5.inf",
"Mode=HTTP",
ITEMDATA,
"Name=cno", "Value={NewParam}", ENDITEM,
LAST);
//修改顾客信息事件结束
lr_end_transaction("consumer-alter",LR_AUTO);
return 0;
}
3. 录入顾客信息脚本
add()
{
//访问网址为:http://192.168.1.125:8080/mms/
web_url("mms",
"URL=http://192.168.1.125:8080/mms/",
"Resource=0",
"Referer=",
"Mode=HTTP",
LAST);
//思考时间为48秒
lr_think_time(48);
//admir用户登陆脚本
web_submit_data("loginUser",
"Action=http://192.168.1.125:8080/mms/Login/loginUser",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
ITEMDATA,
"Name=username", "Value=admir", ENDITEM,
"Name=password", "Value=1234", ENDITEM,
LAST);
web_url("index.html",
"URL=http://192.168.1.125:8080/mms/mms/index.html",
"Resource=0",
"Referer=http://192.168.1.125:8080/mms/",
"Mode=HTTP",
LAST);
web_url("GetLoginName",
"URL=http://192.168.1.125:8080/mms/Login/GetLoginName",
"Resource=1",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t1.inf",
LAST);
//录入顾客信息事件开始
lr_start_transaction("consumer-add");
//思考时间为11秒
lr_think_time(11);
//设置集合点,名为“add”
lr_rendezvous("add");
web_url("Entry.html",
"URL=http://192.168.1.125:8080/mms/mms/tabs/client/Entry.html?_=1558922079006",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t2.inf",
"Mode=HTTP",
LAST);
web_submit_data("GetAllAgency",
"Action=http://192.168.1.125:8080/mms/Agency/GetAllAgency",
"Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t3.inf",
"Mode=HTTP",
ITEMDATA,
LAST);
web_submit_data("GetAllMedicine",
"Action=http://192.168.1.125:8080/mms/Medicine/GetAllMedicine", "Method=POST",
"RecContentType=application/json",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t4.inf",
"Mode=HTTP",
ITEMDATA,
LAST);
lr_think_time(17);
web_submit_data("SaveClient",
"Action=http://192.168.1.125:8080/mms/Client/SaveClient",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.1.125:8080/mms/mms/index.html",
"Snapshot=t5.inf",
"Mode=HTTP",
ITEMDATA,
"Name=cno", "Value={NewParam}", ENDITEM,
"Name=cname", "Value=ztt", ENDITEM,
"Name=csex", "Value=男", ENDITEM,
"Name=cage", "Value=", ENDITEM,
"Name=cphone", "Value=", ENDITEM,
"Name=ano", "Value=10077034", ENDITEM,
"Name=cdate", "Value=2019-05-30", ENDITEM,
"Name=mno", "Value=1001501204", ENDITEM,
"Name=caddress", "Value=", ENDITEM,
"Name=csymptom", "Value=", ENDITEM,
"Name=cremark", "Value=", ENDITEM,
LAST);
//录入顾客信息事件结束
lr_end_transaction("consumer-add",LR_AUTO);
return 0;
}
5.3脚本参数化
1.在脚本中找到要参数化内容,点击右键,点击下拉菜单中的Replace with a Parameter。

2.弹出Select or Create Prarmeter对话框,在Parameter name中,修改参数名称,并点击Properties进行设置。

3.弹出Parameter Properties对话框,如图5-2所示。

点击Edit with Notepad,弹出记事本,然后输入参数化的值。

如图5-1所示。

然后点击保存。

图5-1在记事本中输入参数化的值
4.在Parameter Properties对话框中,迭代方式选择的Unique、Each occurrence 即可,具体设置如图5-2所示。

然后点击close,接着点击Select or Create Prarmeter 对话框中的OK,参数化设置成功。

图5-2Parameter Properties对话框
5.4测试执行
脚本设置完成后,进入执行测试,退到首页,点击Run Load Tests后,弹出New Scenario对话框,如图5-3所示。

选择并加入要打开的可用脚本后,点击OK按钮,成功进入Controller Scenario界面。

图5-3New Scenario界面
5.4.1设置运行环境
1.设置开始用户:进入Controller Scenario界面后,如图5-4所示,双击Global Schedule框中的Star Vusers,弹出Edit Action对话框,设置开始用户数,如100,再设置每15秒执行20个用户量,如图5-5所示。

设置完成后,点击OK按钮,设置成功。

2.设置持续类型:再双击Global Schedule框中的Duration,选择Run until oompetion单选框,如图5-6所示,点击OK按钮,设置完成。

3.设置集合点:点击导航栏中的Scenario,选择下拉菜单中的Rendezvous,弹出Rendezvous Information对话框,点击Policy按钮后,再弹出Policy对话框,选择第一行单选框,如图5-7所示。

图5-4Controller Scenario界面
图5-5Start-Vusers Edit Action对话框
图5-6Duration Edit Action对话框
图5-7Rendezvous Information对话框
5.4.2系统资源监控设置
再界面底部左侧点击Run按钮,进入系统资源监控设置。

添加服务器C盘资源步骤如下:
1.Ctrl+R打开运行窗口,输入:\\19
2.168.1.125\c$,点击回车键后弹出该服务器的用户名和密码,输入完成后成功访问服务器端的C盘资源。

2.在Windows Resources窗口中,右击空白处,点击Add Measurements后,弹出Monitores Server Machines对话框,点击Add按钮,弹出Add Machine对话框,在Name输入框中输入服务器Ip地址:192.168.1.125,如图4-7所示,设置完成后,单击OK。

再选择要分析的性能指标,在此我们仅选择五个性能指标,如图5-8所示。

图5-8Add Machine对话框
图5-9Resource Measurements对话框
5.4.3执行结果
1.查询顾客信息功能
本次执行共执行3次,模拟虚拟用户数分别为:100、200、300,设置集合点为查询代码行的上方,查询参数内容为之前录入过的顾客编号。

如图5-10为200的虚拟用户量执行界面,且全部执行成功,其余100和300的用户量同样执行成功。

图5-10200虚拟用户量查询顾客信息执行界面
2.修改顾客信息功能
本次执行共执行3次,模拟虚拟用户数分别为:100、200、300,设置集合点为修改代码行的上方,修改参数内容为之前录入过的顾客编号。

如图5-11为200的虚拟用户量执行界面,且全部执行成功,其余100和300的用户量同样执行成功。

图5-11200虚拟用户量修改顾客信息执行界面
3.录入顾客信息功能
本次执行共执行3次,模拟虚拟用户数分别为:100、200、300,设置集合点为录入代码行的上方,录入参数内容为新增的顾客信息。

如图5-12为300虚拟用户量执行界面,可以看出有7个失败产生,具体失败详情如图5-13所示,给出-27728错误编号,通过分析,该原因是由于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。

图5-12300虚拟用户量修改顾客信息执行界面
图5-13300虚拟用户量修改顾客信息执行错误详情界面5.5摘要分析
1.查询录入信息功能
(1)模拟100虚拟用户量摘要信息,如图5-14所示:
图5-14100虚拟用户量录入顾客摘要信息
分析:从图5-14中可以看出本次测试场景的执行用时为3分24秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为100,总吞吐量为283,609,200字节,平均每秒吞吐量为1,383,460字节,总请求数为800次,平均每秒请求数为3.902次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出100个虚拟用户同时执行查询功能的平均响应时间为88.09s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是800次。

图5-15200虚拟用户量录入顾客摘要信息
分析:从图5-2中可以看出本次测试场景的执行用时为6分1秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为200,总吞吐量为567,185,000字节,平均每秒吞吐量为1,566,809字节,总请求数为1,600次,平均每秒请求数为4.42次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出200个虚拟用户同时执行查询功能的平均响应时间为203.747s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是1,600次。

图5-16300虚拟用户量录入顾客摘要信息
分析:从图5-3中可以看出本次测试场景的执行用时为8分12秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为300,总吞吐量为825,869,909字节,平均每秒吞吐量为1,675,193字节,总请求数为2,347次,平均每秒请求数为4,761次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出300个虚拟用户同时执行查询功能的平均响应时间为293.425s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是2,347次。

2.修改顾客信息功能
(1)模拟100虚拟用户量摘要信息,如图5-17所示:
图5-17100虚拟用户量修改顾客摘要信息
分析:从图5-17中可以看出本次测试场景的执行用时为2分34秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为100,总吞吐量为283,692,400字节,平均每秒吞吐量为1,830,274字节,总请求数为800次,平均每秒请求数为5,161次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出100个虚拟用户同时执行查询功能的平均响应时间为45.092s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是800次。

图5-18200虚拟用户量修改顾客摘要信息
分析:从图5-18中可以看出本次测试场景的执行用时为4分57秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为200,总吞吐量为567,384,800字节,平均每秒吞吐量为1,903,976字节,总请求数为1,600次,平均每秒请求数为5,369次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出200个虚拟用户同时执行查询功能的平均响应时间为196.914s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是1,600次。

图5-19 300虚拟用户量查询顾客摘要信息
分析:从图5-19中可以看出本次测试场景的执行用时为7分15秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为300,总吞吐量为777,868,773字节,平均每秒吞吐量为1,784,103字节,总请求数为2,283次,平均每秒请求数为5.236次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出300个虚拟用户同时执行查询功能的平均响应时间为293.546s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是293.546次。

3.查询顾客信息功能
(1)模拟100虚拟用户量摘要信息,如图5-20所示:
图5-20100虚拟用户量查询顾客摘要信息
分析:从图5-20中可以看出本次测试场景的执行用时为1分50秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为100,总吞吐量为1,704,200字节,平均每秒吞吐量为15,353字节,总请求数为600次,平均每秒请求数为5,405次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出100个虚拟用户同时执行查询功能的平均响应时间为30.158s。

HTTP Responses Summary 本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是600次。

(2)模拟200虚拟用户量摘要信息,如图5-21所示:
图5-21200虚拟用户量查询顾客摘要信息
分析:从图5-21中可以看出本次测试场景的执行用时为3分5秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为200,总吞吐量为3,408,400字节,平均每秒吞吐量为18,325字节,总请求数为1,200次,平均每秒请求数为4,585次;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出200个虚拟用户同时执行查询功能的平均响应时间为 6.452s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是1,200次。

(3)模拟300虚拟用户量摘要信息,如图5-22所示:
图5-22300虚拟用户量查询顾客摘要信息
分析:从图5-22中可以看出本次测试场景的执行用时为4分20秒;从统计摘要中可以看出场景执行的最大虚拟用户数量为300,总吞吐量为5,112,600字节,平均每秒吞吐量为19,589字节,总请求数为1,800次,平均每秒请求数为6,897次,执行错误总数7个;事务摘要中事务的响应时间是测试中重要的数据,这里可以看出300个虚拟用户同时执行查询功能的平均响应时间为105,719s。

HTTP Responses Summary本次测试“HTTP200”该部分显示在场景执行过程中,每次HTTP请求发出去的状态,其中“HTTP 200”的是1,800次。

4.测试总结
针对各个模块进行5个指标的对比,如表5-1所示:
表5-1 每个功能摘要信息总结
5.6windows资源
Windows资源曲线图主要由5个性能指标组成,分别为:%Processor Time、Processor Queue Length、Available Mbytes、Working Set和Private Bytes,用来判断系统再执行过程中是否达到cpu瓶颈以及内存泄漏问题,分析依据参照表5-2所示。

表5-2Windows性能监控指标
1.查询顾客信息功能
(1)模拟100虚拟用户量windows资源信息,如图5-23所示:
图5-23100虚拟用户量查询顾客windows资源信息
分析:从图5-10中我们可以看到,在不到00:05时,%Processor Time达到了最大并发量的处理器利用率,并在之后逐渐释放,且值始终小于90%。

Available Mbytes、Working Set、Private Bytes以及Processor Queue Length出现4次欺负,但Processor Queue Length平均值小于2,所以本次测试并未造成cpu瓶颈和内存泄漏,但在不到00:05时,随着内存利用率增高,不排除处理器堵塞的问题。

(2)模拟200虚拟用户量windows资源信息,如图5-24所示:
图5-24200虚拟用户量查询顾客windows资源信息。

相关文档
最新文档