1、java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods
IDEA run case抛出no runnable methods,project基于testng编写case
需要配置Run→Edit Configuration
2、task配置
test {
useTestNG {
//打印正在运行的单元测试及结果
testLogging.events = ["failed", "passed", "skipped"]
//打印失败日志到控制台
testLogging.showStandardStreams = true
//配置testng.xml文件位置
suites(file("src/main/resources/qacontext/testng.xml"));
}
beforeTest {
descriptor ->logger.lifecycle("Running test: " + descriptor)
}
onOutput {
descriptor, event →logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message)
}
}
3、testng case执行顺序
类执行顺序
class执行顺序控制-testng.xml之preserve-order
preserve-order:用来控制<test>里面所有<classes>的执行顺序。<test>中默认的preserve-order为true,表示<test>下所有<classes>按照顺序执行,如:
类执行顺序控制
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3.
4. <suite name="suite1">
5. <test name="test" preserve-order="true">
6. <classes >
7. <class name="com.pack.ClassTwo">
8. <class name="com.pack.ClassThree">
9. <class name="com.pack.ClassOne">
10. </classes >
11. </test>
执行顺序:按照ClassTwo,ClassThree,ClassOne执行
【注】 一个<class>类里面可能存在多个测试方法(被@Test注解的方法),这些方法的执行顺序不受preserve-order控制。默认测试方法的执行顺序是按照方法名的首字母升序排序执行的。
case执行顺序
(1) 使用priority指定执行顺序(默认值为0),数值越小,越靠前执行
(2) 方法名称按首字母排序
因为默认执行顺序是按照方法名的首字母升序排序执行。那么,定制方法名称,就可以让方法按照我们要求的顺序执行。如:
(3) 在xml里面使用<include>指定需要执行的方法和顺序
4、使用priority控制case执行顺序,但是testng.xml不支持
用例都使用了@priority方法。testng如果将用例配置到一个test集中,每个用例只会执行一次priority,如只会执行priority=0或1的case
5、testng 线程安全
parallel的取值有三个
1、tests
TestNG 会在相同的线程中运行相同<test>标记下的所有方法。
应用:可以将非线程安全的类放在同一个<test>标签下,并且使其可以利用TestNG多线程的特性的同时,让这些类运行在相同的线程中。
2、methods
method 级别的多线程测试,每个方法都将采用独立的线程进行测试。除非那些互相依赖的方法。那些相互依赖的方法会运行在同一个线程中,并且遵照其执行顺序。
3、classes
不同<class>标签下的用例可以在不同的线程执行,相同<class>标签下的用例只能在同一个线程中执行
属性 thread-count 允许你为当前的执行指定可以运行的线程数量。