TestNG - Kiểm tra sự phụ thuộc
Đôi khi, bạn có thể cần gọi các phương thức trong trường hợp thử nghiệm theo một thứ tự cụ thể hoặc bạn có thể muốn chia sẻ một số dữ liệu và trạng thái giữa các phương thức. Loại phụ thuộc này được hỗ trợ bởi TestNG, vì nó hỗ trợ việc khai báo các phụ thuộc rõ ràng giữa các phương pháp thử nghiệm.
TestNG cho phép bạn chỉ định các phần phụ thuộc với -
Sử dụng thuộc tính dependOnMethods trong các chú thích @Test, HOẶC.
Sử dụng thuộc tính dependOnGroups trong các chú thích @Test.
Ví dụ sử dụng dependOnMethods
Tạo một lớp học
Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Tạo lớp trường hợp thử nghiệm
Tạo một lớp thử nghiệm java, chẳng hạn như DependencyTestUsingAnnotation.java.
Thêm các phương pháp thử nghiệm, testPrintMessage () và testSalutationMessage () và initEnosystemTest (), vào lớp thử nghiệm của bạn.
Thêm thuộc tính dependsOnMethods = {"initEnvironmentTest"} vào chú thích @Test của testSalutationMessage() phương pháp.
Tạo tên tệp lớp java DependencyTestUsingAnnotation.java trong C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnMethods = { "initEnvironmentTest" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
Tạo testng.xml
Tạo testng.xml trong C:\>TestNG_WORKSPACE để thực thi (các) trường hợp thử nghiệm.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
Biên dịch các lớp MessageUtil, Test case bằng javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Bây giờ, hãy chạy testng.xml, phương thức này sẽ chạy phương thức testSalutationMessage () chỉ sau khi thực thi phương thức initEnosystemTest ().
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Xác minh kết quả đầu ra.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Ví dụ sử dụng dependOnGroups
Bạn cũng có thể có các phương pháp phụ thuộc vào toàn bộ nhóm. Hãy lấy một ví dụ để chứng minh điều này.
Tạo một lớp học
Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Tạo lớp trường hợp thử nghiệm
Tạo một lớp thử nghiệm java, chẳng hạn như DependencyTestUsingAnnotation.java.
Thêm các phương pháp thử nghiệm, testPrintMessage () testSalutationMessage () và initEnosystemTest () vào lớp thử nghiệm của bạn và thêm chúng vào nhóm "init".
Thêm thuộc tính dependsOnMethods = {"init.*"} vào chú thích @Test của testSalutationMessage() phương pháp.
Tạo tệp lớp java có tên DependencyTestUsingAnnotation.java trong C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test(groups = { "init" })
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnGroups = { "init.*" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups = { "init" })
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
Trong ví dụ này, testSalutationMessage () được khai báo tùy thuộc vào bất kỳ nhóm nào, khớp với biểu thức chính quy "init. *", Điều này đảm bảo rằng các phương thức testPrintMessage () và initEnosystemTest () sẽ luôn được gọi trước testSalutationMessage ().
Nếu một phương thức phụ thuộc vào không thành công và bạn có phụ thuộc cứng vào nó (alwaysRun = false, là mặc định), các phương thức phụ thuộc vào nó không được đánh dấu là FAIL mà là SKIP. Các phương thức bị bỏ qua sẽ được báo cáo như vậy trong báo cáo cuối cùng (với màu không phải là Đỏ và Xanh trong HTML), điều này rất quan trọng vì các phương pháp bị bỏ qua không nhất thiết là lỗi.
Tạo testng.xml
Tạo testng.xml trong C:\>TestNG_WORKSPACE để thực thi (các) trường hợp thử nghiệm.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
Biên dịch các lớp MessageUtil, Test case bằng javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Bây giờ, hãy chạy testng.xml, phương thức này sẽ chạy phương thức testSalutationMessage () chỉ sau khi thực thi phương thức initEnosystemTest () .
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Xác minh kết quả đầu ra.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
phụ thuộcOnGroups Vs phụ thuộcOnMethods
Khi sử dụng nhóm, chúng tôi không còn gặp phải các vấn đề về cấu trúc lại. Miễn là chúng tôi không sửa đổi thuộc tính nhóm hoặc nhóm phụ thuộc, các bài kiểm tra của chúng tôi sẽ tiếp tục chạy với các phần phụ thuộc thích hợp được thiết lập.
Bất cứ khi nào một phương thức mới cần được thêm vào biểu đồ phụ thuộc, tất cả những gì chúng ta cần làm là đặt nó vào đúng nhóm và đảm bảo rằng nó phụ thuộc vào đúng nhóm. Chúng tôi không cần phải sửa đổi bất kỳ phương pháp nào khác.