Вот курс udemy (от "Lets Kode It") для разработки инфраструктуры автоматизации тестирования. В ходе курса инструктором был разработан класс CheckPoint
для использования в каркасе.
CheckPoint
аналогично TestNg
SoftAssert
. Мотивация разработки CheckPoint
заключается в том, что она позволяет вам настраивать ваши сообщения об ошибках и дает больше информации о том, какие точки проверки в вашем методе тестирования не пройдены.
Я не уверен, что код CheckPoint
подходит качество или если это можно было бы даже рассмотреть для слияния с самой библиотекой TestNg
. Может кто-нибудь сказать мне, если они видят какие-либо серьезные проблемы в коде, просто читая его, кроме того, что API неудобен?
Класс CheckPoint:
import org.testng.Assert;
import java.util.ArrayList;
import java.util.HashMap;
public class CheckPoint {
public static HashMap<String, String> resultMap = new HashMap<String, String>();
private static String PASS = "PASS";
private static String FAIL = "FAIL";
public static void clearHashMap() {
System.out.print("Clearing Results Hash Map");
resultMap.clear();
}
//Set status of the Result Map
private static void setStatus(String mapKey, String status) {
resultMap.put(mapKey, status);
System.out.println(mapKey + " :-> " + resultMap.get(mapKey));
}
/*
Keeps the verification point status with testName, Result and Verification Point Message in hash map
@param testName - The test case name
@param result - Verification Result from test method
@param resultMessage - Message tagged with verification
*/
public static void mark(String testName, boolean result, String resultMessage) {
testName = testName.toLowerCase();
String mapKey = testName + "." + resultMessage;
try {
if (result) {
setStatus(mapKey, PASS);
} else {
setStatus(mapKey, FAIL);
}
} catch (Exception e) {
System.out.println("Exception Occurred...");
setStatus(mapKey, FAIL);
e.printStackTrace();
}
}
/*
Keeps the verification point status with testName, Result and Verification Point Message in hash map
It asserts all the verifications in a test method, if any verification
in a test method is failed then the test case is failed
@param testName - The test case name
@param result - Verification Result from test method
@param resultMessage - Message tagged with verification
*/
public static void markFinal(String testName, boolean result, String resultMessage) {
testName = testName.toLowerCase();
String mapKey = testName + "." + resultMessage;
try {
if (result) {
setStatus(mapKey, PASS);
} else {
setStatus(mapKey, FAIL);
}
} catch (Exception e) {
System.out.println("Exception Occurred...");
setStatus(mapKey, FAIL);
e.printStackTrace();
}
ArrayList<String> resultList = new ArrayList<String>();
for (String key: resultMap.keySet()) {
resultList.add(resultMap.get(key));
}
for (int i = 0; i < resultList.size(); i++) {
if (resultList.contains(FAIL)) {
System.out.println("Test Method Failed");
Assert.assertTrue(false);
} else {
System.out.println("Test Method Successful");
Assert.assertTrue(true);
}
}
}
}
Образец теста:
import CheckPoint;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class CheckpointTests {
@BeforeMethod
public void methodSetup(){
CheckPoint.clearHashMap();
}
@Test
public void test1(){
CheckPoint.mark("test1-step1", false, "test1 fail");
CheckPoint.mark("test1-step2", true, "test1 pass");
CheckPoint.markFinal("test1-step3", true, "test1 pass");
}
@Test
public void test2(){
CheckPoint.mark("test2-step1", true, "test2 pass");
CheckPoint.markFinal("test2-step2", true, "test2 pass");
}
}
Образец вывода:
Clearing Results Hash Map
test1-step1.test1 fail :-> FAIL
test1-step2.test1 pass :-> PASS
test1-step3.test1 pass :-> PASS
Test Method Failed
java.lang.AssertionError: expected [true] but found [false]
Expected :true
Actual :false
{long stack trace here!}
Clearing Results Hash Map
test2-step1.test2: pass :-> PASS
test2-step2.test2: pass :-> PASS
Test Method Successful
Test Method Successful
===============================================
Default Suite
Total tests run: 2, Passes: 1, Failures: 1, Skips: 0