Статьи

Параметризация данных с использованием JSON с Selenium

В моей предыдущей статье я объяснил, как выполнить параметризацию данных с помощью файлов Excel с помощью API-интерфейса Apache POI. В этой статье мы увидим, как добиться того же, используя файлы формата JavaScript Object Notation (JSON). 

Вступление

При тестировании всегда важно тестировать функции приложения с различными наборами данных. Тестирование с одним набором данных, которые мы используем во время записи или при создании базового сценария, не подтвердит функциональность только приложения. Например: когда мы проводим тестирование входа в систему, очень важно протестировать все возможные действительные и недействительные учетные данные, чтобы гарантировать, что функциональность входа работает должным образом.

Одним из способов тестирования нескольких наборов данных является создание отдельных тестовых сценариев / тестовых случаев, которые содержат один набор жестко закодированных данных. В этом случае, если мы планируем протестировать функциональность с десятью различными наборами данных, мы должны создать десять независимых тестовых сценариев с разными данными. Другой способ — создать базовый сценарий с одним набором данных, вручную изменить данные и выполнить сценарий 10 раз.

Оба подхода трудоемки и практически сложны, а также нецелесообразны. Лучший и рекомендуемый подход к обработке нескольких наборов данных состоит в том, чтобы иметь все идентифицированные тестовые данные в любом из источников данных, таких как Excel, XML или в файлах JSON.

Здесь, в этой статье, мы увидим, как добиться параметризации данных с помощью файлов JSON.

Тематическое исследование

Мэри — недавно присоединившийся разработчик тестов автоматизации в вашем проекте. Она провела предварительное тестирование приложения Tricentis Demowebshop и пыталась войти в систему с несколькими пользователями приложения. Данные испытаний предоставляются в формате JSON. Можете ли вы руководить Мэри, чтобы завершить эту деятельность?

Вот URL приложения.

ожидания

Помогите Мэри проверить экран входа в систему с двумя наборами действительных и одним набором недействительных учетных данных, указанных в файле 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.