JAva-testng-selenium最適化

8186 ワード

プロジェクトのwebuiテストの必要性のため、testng+seleniumの方式を使って、その中でいくつかの問題に出会ったことがあって、記録して、後で見るのが便利です
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();
          }
    }