关于自动化测试报告:
之前用过testNG自带的测试报告、优化过reportNG的测试报告、extentreport、Zreport(大飞总原创),这些是我之前都用过的,也是在去年雯姐和我说过Allure2这个报告不错,一直没时间,正巧最近有用到,接触下发现确实是个神器。
Allure(已经有allure2了,小编用的就是allure2),生成的测试报告与上述对比,简直堪称完美!先上个测试报告的图表,给大家直观感受下:
下面让我们一起走进Allure的世界,跟上步伐,相信我这一切并不难
一、pom文件部分
4.0.0
allure-demo
allure-demo
1.0-SNAPSHOT
2.10.0
UTF-8
1.8
1.9.2
src/test/resources/suite/test-moudle/testng.xml
selenium-server-standalone
selenium-server-standalone
3.9.1
io.qameta.allure
allure-testng
${allure.version}
test
org.hamcrest
hamcrest-all
1.3
test
org.testng
testng
6.14.3
io.qameta.allure
allure-java-commons
2.10.0
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.8
1.8
UTF-8
org.apache.maven.plugins
maven-surefire-plugin
2.22.1
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
src/test/resources/testng.xml
org.aspectj
aspectjweaver
${aspectj.version}
true
io.qameta.allure
allure-maven
2.10.0
${allure.version}
二、安装插件
在Jenkins插件管理中,搜索Allure即可
三、安装Allure Commandline
安装完allure插件后,进入系统管理-->全局工具配置,安装Allure Commandline
保存即可
此时再通过Jenkins构建并执行测试代码后,就可以看到Allure的测试报告了。以上,完成了Allure的基本配置。
四、Allure用法
1、注解:
我只列举一些常用的注解,其他的可以自行去官网查阅
//用例编号
@TmsLink("562")//bug编号
@Issue("4042")//bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@Severity(SeverityLevel.TRIVIAL)//用例描述
@Description("测试一个流程,用作回归冒烟测试")
添加@TmsLink,@Issue注解后,在allure report中会生成相应的链接,但是它是如何访问我们的缺陷管理系统以及用例管理系统给的呢,在官网文档有说明。
查看文档发现,需要有一个配置文件,将我们系统域名预先设置好,再将{}的内容使用注解进行替换,这样就能访问到我们想范文的连接了。但是官方并没有说明这个配置文件的具体配置,好在官方有一些简单的小demo可供产考;
这是官方的testng的demo地址/allure-examples/allure-testng-example/tree/master/src/test/resources
可以看到它有一个文件名叫做allure.properties
这是文件的内容
allure.results.directory=target/allure-results
allure.link.issue.pattern=/issue/{}
allure.link.tms.pattern=/tms/{}
第一个应该是默认的输出路径,暂时未用到先不研究,将你需要访问的url替换就可以,比如:
allure.link.issue.pattern=/browse/{}
allure.link.tms.pattern=/{}
这里需要注意一点,allure.properties的位置必须是跟你路径下的test同级否则会找不到这个文件;
我用的是idea创建的maven项目
最终效果如下:
2、自动截图
allure最吸引我的地方是,不用存到本地,它能将selenium的截图放到report中
第一步:写一个监听类,当执行失败自动截图
packagecom.allure.demo;importio.qameta.allure.Attachment;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.TakesScreenshot;importorg.testng.ITestResult;importorg.testng.TestListenerAdapter;public class TestFailListener extendsTestListenerAdapter {
@Overridepublic voidonTestFailure(ITestResult result) {
screenshot();
}
@Attachment(value= "screen shot",type = "image/png")public byte[] screenshot(){byte[] screenshotAs =((TakesScreenshot)GetDriver.driver).getScreenshotAs(OutputType.BYTES);returnscreenshotAs;
}
}
第二步:在测试类上,添加Listeners的注解
packagecom.allure.demo;import io.qameta.allure.*;importorg.openqa.selenium.By;importorg.openqa.selenium.Keys;importorg.openqa.selenium.WebDriver;importorg.testng.Assert;import org.testng.annotations.*;importjava.util.concurrent.TimeUnit;
@Epic("百度查询功能测试")
@Feature("百度查询功能")
@Listeners(TestFailListener.class)public classAllureDemo {staticWebDriver driver;static final int MAX_TIMEOUT_IN_SECONDS = 5;
@BeforeClasspublic static void beforeClass() throwsException {
driver= newGetDriver().getDriver();
String url= "/";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
driver.get(url);
}//用例编号
@TmsLink("562")//bug编号
@Issue("4042")//bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@Severity(SeverityLevel.TRIVIAL)//用例描述
@Description("测试一个流程,用作回归冒烟测试")/***功能块,具有相同feature或astory的用例将规整到相同模块下,执行时可用于筛选*/@Story("查询场景-正向查询功能")
@Test(description= "验证百度查询功能", dataProvider = "testDemo")public void testDemo(String key) throwsException {
driver.findElement(By.id("kw")).clear();
driver.findElement(By.id("kw")).sendKeys(key, Keys.ENTER);
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle(), key+ "_百度搜索");if (key.equals("java")){
Assert.assertEquals(driver.getTitle(),"断言失败!");
}
}
@AfterClasspublic static voidtearDownAfterClass() {if (driver != null) {
System.out.println("运行结束!");
driver.quit();
}
}
@DataProvider(name= "testDemo")publicObject[][] testDemo() {return newObject[][]{
{"软件测试君"},
{"refain 博客园"},
{"java"},
};
}
}
截图效如下图:
是不是很nice,还不动手试一试········