小马的测试用例那些事 JMeter - 做 web 功能业务 Regression 回归测试

老马 · 2018年11月28日 · 2037 次阅读

在本文中,我们将创建一个接口业务回归场景,其中包含功能和非功能检查。
我们测试的 web 应用程序将是 http://blazedemo.com/

回归测试目标

这些是我们将在此回归场景中执行的检查列表。
我决定将功能检查(步骤 1-2)和一个非功能性检查(步骤 3)包括在内,以显示我们如何在一个 Test Plan 中将各种检查组合在一起:

  • 1.打开 http://blazedemo.com/应用程序主页 验证应用程序是否已成功打开,我们获得了欢迎页面
  • 2.查找从巴黎飞往罗马的航班 确认我们能找到至少从巴黎飞往罗马的航班
  • 3.进行航班预订 确认航班预订请求在 1 秒内完成

功能 Regression 回归测试

让我们为我们的测试创建一个线程组。由于我们要验证功能方面而不是测试负载,因此仅使用一个用户并仅执行一个检查循环就足够了。
为此,创建一个只有一个用户的 “线程组”,并将 “1” 作为 Loop Count“循环” 值。在你拥有一个庞大的回归 Test Plan 之前,建议你将回归测试保存在一个单独的 “线程组” 中,该组包含多个 “简单控制器” 元素以保持简单。这些简单的控制器用于更好地分组和分离测试。
所以,
1.这是我们的'线程组':

2.添加一个'Simple Controller',它将用作端到端回归场景的容器:
右键单击 Thread Group - > Add - > Logic Controller - > Simple Controller

回归测试步骤 1 - 验证应用程序是否已成功打开,访问到欢迎页面

我们需要测试的第一件事是打开应用程序(请求主页)并确认它已成功打开。最简单的方法是创建响应断言.
我们知道http://blazedemo.com/ 主页包含 “欢迎使用 Simple Travel Agency!” 文本字符串。因此,为了确保主页被打开,我们需要做的就是对此进行断言。
单元测试的最佳实践:“一个测试=一个断言”。但由于我们不是在进行单元测试,而是在进行端到端的集成方案,因此断言越多越好。这次我们将限制断言的数量,专注于主题,但请记住这一点。

1.我们的第一个采样器应该到达主页面:

2 .此时我们可以添加我们的两个断言
如果页面成功加载,您通常应该期望 200 响应代码

我们知道http://blazedemo.com/ 主页包含 “Welcome to the Simple Travel Agency!” 文本字符串。因此,为了确保主页被打开,我们需要做的就是对此进行断言。

3.验证回归测试结果最方便的方法是添加 “查看结果树” 监听器:
右键单击 Thread Group - > Add - > Listener - > View Results Tree
我们可以看到断言已经过去,一切都是 Pass 绿色的。

回归测试第 2 步 - 确认我们至少可以找到从巴黎到罗马的一些航班

根据我们的测试用例,下一步是找到从巴黎飞往罗马的航班。为此,我们需要发送带有适当参数的 POST 请求:

这些请求都可以通过 firefox F12 工具查看到.

在这一步,我们的测试用例表明我们需要 “验证我们能找到至少一些从巴黎到罗马的航班”。这次你无法说出我们在响应中应该期待哪些文本,这使得我们的验证更加棘手。
但由于强大的 JMeter 断言功能,我们总是有很多不同的方法来实现我们的测试目标。
这次我们可以使用'XPath Assertion'元素来验证我们至少有一个航班。
我们只需找到代表一个航班的适当 XPath,我们可以利用 chrome 的插件扩展工具XPath Helper

可以看到 找到了 table 表格中的 5 个航班.

让我们将断言添加到我们的测试中。'XPath Assertion'可以这样添加:
右键单击 Thread Group - > Add - > Assertion - > XPath Assertion
请记住,'XPath Assertion'元素也验证了 HTML 页面结构。因此,如果您的页面未遵循所有 HTML 规则,则必须选中 Use Tidy“使用整洁” 和 Quiet“安静” 复选框,以避免错误:

回归测试步骤 3-在不到 3 秒的时间内确认航班预订请求已完成

对于下一步,我们需要继续进行飞行预订。预订终点需要航班详细信息,如航班号和航空公司。为了做到这一点,我们需要使用一个更强大的 JMeter 处理器 - JMeter PostProcessors。
JMeter PostProcessors 允许您解析响应并将数据提取到变量中。之后可以在测试中使用这些变量。与我们使用 XPath 断言的方式相同,我们需要找出代表航班号和航空公司的 XPath。
基于 FirePath,我们可以发现'//table[contains(@class,'table')]/tbody/tr[1]/td[3]' 这个 XPath 代表航空公司而'//table[contains(@class,'table')]/tbody/tr[1]/td[2]' 这个 XPath 代表航班号。

为航空公司添加'XPath Extractor'元素:
右键单击 Thread Group - > Add - > Post Processors - > XPath Extractor

我们对航班号做了同样的事情,但这次用'//table[contains(@class,'table')]/tbody/tr[1]/td[2]' XPath,现在这些值可用了使用 $ {Airline}和 $ {FlightNumber}变量。现在我们只需要在后续请求中使用这些变量来执行航班预订。

非功能回归测试

请求性能检查。即使在运行大量负载测试之前,这些对于跟踪和捕获基本性能回归也很重要。

为了实现这一目标,我们可以使用 Duration Assertion“持续时间断言”,声明请求在合理的时间内完成。假设我们有规格说明航班预订不应超过三秒钟。在这种情况下,我们可以在其上添加一个断言,并用作每个测试周期的回归检查。
要添加'持续时间断言':
右键单击 Thread Group - > Add - > Assertion - > Duration Assertion

总结

这样我们就可以利用 JMeter,进行 web 页面引用的功能性回归了,充分利用响应断言 (主要判断 API 响应 和 响应中包含的文本) 和 XPath 断言 (主要获取响应中的文本)
就可以做到对某一功能的回归测试了.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册