Я новичок в автоматическом тестировании/Java, поэтому, пожалуйста, простите меня, если это глупый вопрос.Параллельная проверка/разборка одного теста на набор тестов? Организация тестирования
Моя команда рассматривает возможность использования Sauce Labs вместо локальной конфигурации Grid для тестирования наших веб-приложений. Мне удалось получить тесты для параллельного запуска на основе этого кода на веб-сайте Sauce, https://docs.saucelabs.com/tutorials/java/#running-tests-in-parallel, но мне не нравится избыточность необходимости указывать на каждом тестовом примере, какие браузеры вы хотите тестировать. Кроме того, код примера работает только для настольных конфигураций и не работает для мобильных устройств (объявляет ОС, версию и браузер).
Я изменил код, чтобы он теперь считывал пары имя/значение из текстового файла в проекте Maven и выполняет итерацию по каждой строке и задает каждое имя/значение как возможность. При таком подходе мне не нужно обновлять каждый из моих тестов, поскольку новые версии браузера/устройства поддерживаются WebDriver.
При исследовании того, как я могу изменить свой код, чтобы упростить свои тестовые комплекты, я столкнулся с документацией JUnit, которая предполагает, что этот подход создает зависимости, http://junit.org/faq.html#organize_3.
Меня интересовали бы мысли людей об этом подходе. С точки зрения технического обслуживания указание браузеров в вашем тестовом примере кажется кошмаром. Есть ли у кого-нибудь пример кода того, как они настраивают свои тестовые комплекты или ресурсы, которые приведут меня в правильном направлении?
Я ценю любой ввод!
Пример кода:
@RunWith(ConcurrentParameterized.class)
public class NewTest implements SauceOnDemandSessionIdProvider {
private String capabilities, sessionId, jobID;
private WebDriver driver;
public SauceOnDemandAuthentication authentication = new SauceOnDemandAuthentication(CommonConstants.SAUCE_USERNAME, CommonConstants.SAUCE_ACCESS_KEY);
public NewTest(String capabilities){
this.capabilities = capabilities;
}
@ConcurrentParameterized.Parameters
public static LinkedList<String[]> browsersStrings() throws IOException {
LinkedList<String[]> capabilities = new LinkedList<String[]>();
//get file of desired capabilities.
File file = new File(CommonConstants.CAPABILITIES_TEXT_FILENAME);
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
//iterate through each line of the file and assign that line to an array
String line;
while((line = bufferedReader.readLine()) != null) {
capabilities.add(new String[] {line});
}
//close the file reader
bufferedReader.close();
//return the array to each parallel test to be used in the setup() function
return capabilities;
}
@Before
public void setUp() throws Exception {
DesiredCapabilities capability = new DesiredCapabilities();
String[] caps = capabilities.split(";");
int numberOfCapabilities = caps.length;
for(int i = 0; i < numberOfCapabilities; i++) {
String[] nameValues = caps[i].split(",");
String n = nameValues[0].toString();
String v = nameValues[1].toString();
capability.setCapability(n, v);
}
//use this to use Sauce Labs
this.driver = new RemoteWebDriver(new URL("http://" + authentication.getUsername() + ":" + authentication.getAccessKey() + "@ondemand.saucelabs.com:80/wd/hub"), capability);
//use this to use local configuration. Other portions of test case will also have to be commented out...
/*this.driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);*/
}
@Test
public void test() throws Exception {
driver.get("https://www.google.com/");
jobID = ((RemoteWebDriver) driver).getSessionId().toString();
updateSauceStatus(jobID);
}
@After
public void tearDown() throws Exception {
//TODO validate the driver is still active
driver.quit();
}
@Override
public String getSessionId() {
return sessionId;
}
public void updateSauceStatus (String jobID) {
SauceREST client = new SauceREST(authentication.getUsername(), authentication.getAccessKey());
Map<String, Object> updates = new HashMap<String, Object>();
//TODO
/*updates.put("name", "this job has a name");*/
updates.put("passed", true);
//TODO
/*updates.put("build", "1.0.2");*/
client.updateJobInfo(jobID, updates);
client.getJobInfo(jobID);
}
}
Как видно из комментариев, есть еще многое предстоит сделать на этом ...