浅谈断言之HTML断言
JMeter的HTML断言是一种用于验证响应数据是否包含预期HTML内容的功能。它通过比较响应中的HTML代码与用户定义的规则来判断请求是否成功。这对于确保Web应用返回的页面内容符合预期非常有用,尤其是在自动化测试和性能测试场景下。下面是一份关于如何在JMeter中配置和使用HTML断言的详细指南。
什么是HTML断言?
HTML断言是JMeter提供的一种断言类型,主要用于验证服务器响应中是否包含特定的HTML标签或文本内容。通过精确匹配或模式匹配的方式,它可以检查响应数据是否符合预期的HTML结构或内容,从而判断请求是否成功执行。
何时使用HTML断言?
● 验证页面元素:当你需要确认网页上某个元素(如特定的文本、图片、链接等)是否存在时。
● 检查页面结构:适用于需要验证页面的HTML结构是否正确,比如某个div标签是否被正确渲染。
● 功能回归测试:确保在进行软件更新或修改后,关键的HTML内容没有被意外更改或删除。
如何添加HTML断言?
- 打开JMeter测试计划:首先,打开或创建你的JMeter测试计划。
- 选择请求添加断言:在测试计划中,找到你想要添加断言的HTTP请求(或其他类型的请求),右键点击该请求,选择“添加” -> “断言” -> “HTML断言”。
- 配置HTML断言:添加后,你会看到HTML断言的配置界面。主要配置项包括:
○ Tidy Settings:Tidy 环境配置,其中Tidy是一个基于HTML的语法检查器以及打印工具,它可以将HTML转换为XML类型的文件。
○ Doctype:文档类型,通过下拉框选择不同文档类型,其中 omit表示疏忽遗漏、auto表示动态,strict表示严格以及loose)
○ Format:文件格式,通过选择HTML/XHTML/XML三种类型的文件格式来检查返回内容
○ Errors only:误差校正,勾选该选项,则可以忽略Warning,此时只对误差进行统计检查;如果返回内容的检查结果超过指定数据,则断言失败。
○ Error threshold:误差/错误范围,填写最大的接受值
○ Warning threshold:警告范围,填写最大的接受值
○ 将JTidy报告写入文件:写入JTidy报告的文件路径,JTidy是Tidy的一个java移植,可理解为一个处理HTML文件的DOM解析器
应用实例
首先我们使用SpringBoot框架编写一段测试代码接口
//html
@GetMapping(value = "/html",produces = "application/html")
public String Returnhtml() {
return "<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <title>简单表单提交界面</title>\n" +
"</head>\n" +
"<body>\n" +
" <h1>欢迎来到我们的简易表单</h1>\n" +
" <form action=\"/submit_form\" method=\"post\">\n" +
" <label for=\"name\">姓名:</label>\n" +
" <input type=\"text\" id=\"name\" name=\"name\"><br><br>\n" +
" <label for=\"email\">电子邮件:</label>\n" +
" <input type=\"email\" id=\"email\" name=\"email\"><br><br>\n" +
" <label for=\"message\">消息:</label>\n" +
" <textarea id=\"message\" name=\"message\"></textarea><br><br>\n" +
" <input type=\"submit\" value=\"提交\">\n" +
" </form>\n" +
"</body>\n" +
"</html>";
}
我们编写如下脚本:
线程组:保持默认
HTTP信息头管理器:名称设置为accept,值为application/html
HTTP请求:协议设置为http,服务器名称或IP设置为127.0.0.1,端口设置为8091,方法设置为GET,路径设置为/html,内容编码为utf-8
HTML断言:Doctype设置为auto,Format选择auto,勾选Errors only,Error threshold为0,将JTidy报告写入文件,路径设置为:C:\Users\XXXX\Desktop\test.txt
运行结果,查看结果树中是否成功,http请求断言成功,不显示断言的结果
但是打开保存的路径中的内容信息可以得到如下报告
line 4 column 5 - Warning: lacks “content” attribute
InputStream: Doctype given is “”
InputStream: Document content looks like HTML 4.01 Transitional
1 warning, no errors were found!
注意事项
● 性能影响:使用HTML断言会增加每个采样的处理时间,特别是在使用复杂正则表达式时。因此,在大规模性能测试中应谨慎使用。
● 精确性与灵活性:正则表达式的使用可以提高匹配的灵活性,但同时也要求更高的编写精确度,避免误报或漏报。
● 响应编码:确保考虑响应的字符编码,特别是当断言涉及到非ASCII字符时,可能需要调整JMeter的编码设置以正确处理响应数据。
总结
通过合理配置和运用HTML断言,你可以有效地验证Web应用的响应内容,确保其按照预期工作,提升测试的准确性和效率。