JAva-testng-selenium最適化
8186 ワード
プロジェクトのwebuiテストの必要性のため、testng+seleniumの方式を使って、その中でいくつかの問題に出会ったことがあって、記録して、後で見るのが便利です
1.複数回caseを繰り返す
seleniumなので、何度も実行する必要がある場合があります.方法はRetryのクラスを書いてtestngのretryクラスを継承すればいいです.
2.カスタムannotions
testngには多くのコメントが付いていて使いやすいですが、プロジェクトでは、チーム長が各caseの前にこのcaseの役割を説明できるように要求し、後でcaseが失敗したときに、このcaseの役割と失敗原因を出力することができ、他人がコードを見なくても読めるようにするので、annotationをカスタマイズしてdecsript属性を追加したいと思っています.
3.seleniumスクリーンショット
現在、このスクリーンショット方式はremoteでseleniumを実行するとき、私はfirefoxの下で成功しただけで、ieは死んではいけません.シーンはcaseの実行に失敗したときにスクリーンショットを切り取って、主にassertを書き直して、失敗したと断言するとき、スクリーンショット、直接、スクリーンショットのコード
1.複数回caseを繰り返す
seleniumなので、何度も実行する必要がある場合があります.方法はRetryのクラスを書いてtestngのretryクラスを継承すればいいです.
public class Retry implements IRetryAnalyzer {
private int retryCount = 0;
private int maxRetryCount = 3;
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
System.out.println(String.format("test failed!try %d time!",retryCount+1));
return true;
}
return false;
}
case
@Test(retryAnalyzer=Retry.class)
2.カスタムannotions
testngには多くのコメントが付いていて使いやすいですが、プロジェクトでは、チーム長が各caseの前にこのcaseの役割を説明できるように要求し、後でcaseが失敗したときに、このcaseの役割と失敗原因を出力することができ、他人がコードを見なくても読めるようにするので、annotationをカスタマイズしてdecsript属性を追加したいと思っています.
1 //UIMessage.java
2 import static com.myhexin.common.Assert.AssertEquals;
3
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7 import java.lang.annotation.ElementType;
8
9 import org.testng.annotations.Parameters;
10 import org.testng.annotations.Test;
11 @Retention(RetentionPolicy.RUNTIME)
12 @Target({ElementType.METHOD})
13 public @interface UIMessage {
14 String description();
15 }
16
17 //
18 @UIMessage(description = " ")@Test(retryAnalyzer=Retry.class)
19 @Parameters()
20 public void testDengLuZhangHao(){
21 /*
22 *
23 */
24 }
25 // annotation ,
26
27 Method[] methods=Class.forName("core.Member").getDeclaredMethods();
28 for(Method method:methods)
29 {
30 if(method.isAnnotationPresent( UIMessage. class))
31 {
32 System. out.println(method.getAnnotation( UIMessage. class).desciption());
33 }
34 }
3.seleniumスクリーンショット
現在、このスクリーンショット方式はremoteでseleniumを実行するとき、私はfirefoxの下で成功しただけで、ieは死んではいけません.シーンはcaseの実行に失敗したときにスクリーンショットを切り取って、主にassertを書き直して、失敗したと断言するとき、スクリーンショット、直接、スクリーンショットのコード
public void screenShot(WebDriver driver,int i)
{
String dir_name="./pic";
if (!(new File(dir_name).isDirectory())) { //
new File(dir_name).mkdir(); //
}
SimpleDateFormat sdf = new SimpleDateFormat("-HHmmss");
String time = sdf.format(new Date());
WebDriver augmentedDriver = new Augmenter().augment(driver);
try {
File screenshot = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE); // , , temp
FileUtils.copyFile(screenshot, new File(dir_name + File.separator + i+ time + ".png")); //
} catch (IOException e) {
e.printStackTrace();
}
}