В моей предыдущей статье я объяснил, как выполнить параметризацию данных с помощью файлов Excel с помощью API-интерфейса Apache POI. В этой статье мы увидим, как добиться того же, используя файлы формата JavaScript Object Notation (JSON).
Вступление
При тестировании всегда важно тестировать функции приложения с различными наборами данных. Тестирование с одним набором данных, которые мы используем во время записи или при создании базового сценария, не подтвердит функциональность только приложения. Например: когда мы проводим тестирование входа в систему, очень важно протестировать все возможные действительные и недействительные учетные данные, чтобы гарантировать, что функциональность входа работает должным образом.
Одним из способов тестирования нескольких наборов данных является создание отдельных тестовых сценариев / тестовых случаев, которые содержат один набор жестко закодированных данных. В этом случае, если мы планируем протестировать функциональность с десятью различными наборами данных, мы должны создать десять независимых тестовых сценариев с разными данными. Другой способ — создать базовый сценарий с одним набором данных, вручную изменить данные и выполнить сценарий 10 раз.
Оба подхода трудоемки и практически сложны, а также нецелесообразны. Лучший и рекомендуемый подход к обработке нескольких наборов данных состоит в том, чтобы иметь все идентифицированные тестовые данные в любом из источников данных, таких как Excel, XML или в файлах JSON.
Здесь, в этой статье, мы увидим, как добиться параметризации данных с помощью файлов JSON.
Тематическое исследование
Мэри — недавно присоединившийся разработчик тестов автоматизации в вашем проекте. Она провела предварительное тестирование приложения Tricentis Demowebshop и пыталась войти в систему с несколькими пользователями приложения. Данные испытаний предоставляются в формате JSON. Можете ли вы руководить Мэри, чтобы завершить эту деятельность?
ожидания
Помогите Мэри проверить экран входа в систему с двумя наборами действительных и одним набором недействительных учетных данных, указанных в файле JSON.
Отчет в файле JSON с «Действительный пользователь» или «Недопустимый пользователь» на основе функциональности приложения
Входной файл JSON:
[
{
"users":{
"username":"john@abc.com",
"password":"abcd@1234",
}
},
{
"users":{
"username":"doe@abc.com",
"password":"pwd@1234",
}
},
{
"users":{
"username":"henry@abc.com",
"password":"abcd@1234",
}
}
]
Существует два типа форматов JSON: простые JSON и массивы JSON.
Простой JSON
Данные хранятся здесь в простом текстовом формате, к которому можно легко получить доступ. Переменная JSON, которую мы определяем, является объектом, который содержит множество свойств, использующих структуру key: value. Ниже приведен пример простого структуры JSON:
var mydetails = {
"Name" : "Jack",
"Age" : "30",
"Gender" : "Male"
};
Array JSON
JSON также поддерживает хранение нескольких наборов данных в форме структуры Array. Это может быть достигнуто путем хранения нескольких объектов в квадратных скобках в одной структуре JSON, как показано ниже:
var empdetails = [{
"Name" : "John",
"Designation" : "Project Manager",
"Gender" : "Male"
},
{
"Name" : "Doe",
"Designation" : "Team Lead",
"Gender" : "Male"
}];
Используя индекс массива объекта empdetails
, мы можем получить доступ ко всем элементам массива JSON.
Как работать с JSON в Selenium
Есть два способа использования JAR-библиотек JSON в Eclipse:
1. Загрузите / добавьте » json-simple-1.1.jar» в проект Java
2. Используйте эту зависимость Maven в файле pom.xml проекта Maven.
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
Как читать данные из файла JSON
Создайте JSONParser
экземпляр для анализа файла JSON в древовидную структуру с любым FileInputStream
объектом в качестве параметра
JSONParser jsonParser = new JSONParser();
FileReader reader = new FileReader("Testdata.json");
//Read JSON file
Object obj = jsonParser.parse(reader);
JSONArray
используется для анализа JSON, который начинается с скобок массива
JSONArray usersList = (JSONArray) obj;
System.out.println("Users List-> "+usersList); //This prints the entire json file
Метод .get используется для доступа к значениям в JSON по индексу
for(int i=0;i<usersList.size();i++)
{
JSONObject users = (JSONObject) usersList.get(i);
System.out.println("Users -> "+users);//This prints every block - one json object
JSONObject user = (JSONObject) users.get("users");
System.out.println("User -> "+user); //This prints each data in the block
String username = (String) user.get("username");
String password = (String) user.get("password");
System.out.println("The username in JSON is: "+username);
System.out.println("The password in JSON is: "+password);
}
Как записать данные в файл JSON
Метод «put» используется для записи данных в файл JSON.
user.put("result", result);
Мы можем использовать FileWriter
объект и toJSONString()
метод для записи в файл JSON в виде строки.
file.append(usersList.toJSONString());
Пример Selenium для обработки файлов JSON
public class JSONHandling {
WebDriver driver;
@BeforeTest
public void beforeTest() throws IOException {
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "null");
System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\Drivers\\geckodriver.exe");
driver = new FirefoxDriver();
driver.get("http://demowebshop.tricentis.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
}
@Test
public void testAut() throws InterruptedException, IOException, ParseException {
readWriteJSON();
}
@AfterTest
public void afterTest() {
driver.close();
}
public String login(String username, String password) throws InterruptedException {
driver.findElement(By.linkText("Log in")).click();
driver.findElement(By.name("Email")).sendKeys(username);
driver.findElement(By.name("Password")).sendKeys(password);
driver.findElement(By.xpath("//input[@class='button-1 login-button' and @value='Log in']")).click();
if(driver.findElements(By.xpath("//input[@id='vote-poll-1']")).size()>0)
{
String uname = driver.findElement(By.xpath("//a[@href='/customer/info']")) .getText();
if(uname.equals(username))
driver.findElement(By.xpath("//a[@href='/logout']")).click();
}
else
{
driver.findElement(By.xpath("//a[@href='/login']")).click();
return "Invalid User";
}
return "Valid User";
}
@SuppressWarnings("unchecked")
public void readWriteJSON() throws InterruptedException, IOException, ParseException {
JSONParser jsonParser = new JSONParser();
try {
FileReader reader = new FileReader("Testdata.json");
//Read JSON file
Object obj = jsonParser.parse(reader);
JSONArray usersList = (JSONArray) obj;
System.out.println("Users List-> "+usersList); //This prints the entire json file
for(int i=0;i<usersList.size();i++) {
JSONObject users = (JSONObject) usersList.get(i);
System.out.println("Users -> "+users);//This prints every block - one json object
JSONObject user = (JSONObject) users.get("users");
System.out.println("User -> "+user); //This prints each data in the block
String username = (String) user.get("username");
String password = (String) user.get("password");
String result = login(username,password);
user.put("result", result);
//Write JSON file
try (FileWriter file = new FileWriter("Testdata1.json")) {
file.append(usersList.toJSONString());
file.flush();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(user);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Выходной файл JSON (Testdata1.json) будет выглядеть следующим образом:
[
{
"users":{
"result":"valid user",
"username":"john@abc.com",
"password":"abcd@1234",
}
},
{
"users":{
"result":"invalid user",
"username":"doe@abc.com",
"password":"pwd@1234",
}
},
{
"users":{
"result":"valid user",
"username":"henry@abc.com",
"password":"abcd@1234",
}
}
]
Заключение
В этой статье мы увидели, как получить доступ к файлам JSON в Selenium. Обсуждаемый нами пример будет выполняться в течение 3 итераций, проверяя входные данные и записывая «допустимого» или «недействительного» пользователя в столбец «Результат» выходного файла JSON.