Перейти к содержимому

Фотография

Как должны выглядеть автотесты?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 curiouspm

curiouspm

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 10 декабря 2015 - 09:13

Начал изучать автоматизированное тестирование. Написал обёртку для вебдрайвера для тестирования страницы регистрации на нашем сайте. В итоге сами тесты у меня выглядят как показано ниже.

 

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

 

С одной стороны хочется уменьшить дублирование кода и объединить проверки (например, собрать все проверки поля login в одну функцию), с другой - неясно будет ли понятно потом написанное непричастным (скажем, ручным тестировщикам).

 

А на что у вас похожи автотесты?

@Test
public void negative2SymbolsLogin() {
	UserRegistrationPage regPage = pageHelper.navigateToUserRegistrationPage();

	User user = userHelper.generateValidUser();
	user.setLogin("gj");
	RegistrationErrorPage errorPage = 
		regPage.incorrectRegistration(user, user.getPassword(), true);

	Assert.assertTrue(errorPage.hasErrorFieldWithText(
			"Login: Field length must be in: 3..25"));
}

@Test
public void negative4MoreDigitsInLogin() {
	UserRegistrationPage regPage = pageHelper.navigateToUserRegistrationPage();

	User user = userHelper.generateValidUser();
	user.setLogin("test82715user");
	RegistrationErrorPage errorPage = 
	regPage.incorrectRegistration(user, user.getPassword(), true);

	Assert.assertTrue(errorPage.hasErrorFieldWithText(
			"Login: Invalid Field Format"));
}

@Test
public void negativeSpaceInLogin() {
	UserRegistrationPage regPage = pageHelper.navigateToUserRegistrationPage();

	User user = userHelper.generateValidUser();
	user.setLogin("this is");
	RegistrationErrorPage errorPage = 
		regPage.incorrectRegistration(user, user.getPassword(), true);

	Assert.assertTrue(errorPage.hasErrorFieldWithText(
			"Login: Invalid Field Format"));
}

@Test
public void negativeWrongSymbolInLogin() {
	UserRegistrationPage regPage = pageHelper.navigateToUserRegistrationPage();

	User user = userHelper.generateValidUser();
	user.setLogin("$wrongsymbol");
	RegistrationErrorPage errorPage = 
		regPage.incorrectRegistration(user, user.getPassword(), true);

	Assert.assertTrue(errorPage.hasErrorFieldWithText(
			"Login: Invalid Field Format"));
}

  • 0

#2 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 10 декабря 2015 - 11:12

http://testng.org/do...s-dataproviders
  • 0

#3 clipsa

clipsa

    Специалист

  • Members
  • PipPipPipPipPip
  • 527 сообщений
  • ФИО:Ермолаева Ольга
  • Город:Москва


Отправлено 11 декабря 2015 - 11:25

У вас во всех приведенных тестах абсолютно одинаковые шаги, отличаются только параметры.

Сделайте параметризованный метод, например, userLogin, который будет проходить эти шаги, а в тестах сделайте просто вызовы этого метода с соответствующими тесту параметрами.


  • 0

Не следует заставлять тестировщиков тестировать быстрее. Что может быть хуже испуганных, усталых, цинично настроенных тестировщиков?
-----------------
Хорошо, когда человек заводит баги. Плохо, когда баги заводят человека (с)
-----------------
Проект для начинающих тестировщиков Хомячки


#4 curiouspm

curiouspm

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 21 декабря 2015 - 12:48

Всем спасибо. Теперь те тесты (и даже немного больше) выглядят так:

final String MSG_LOGIN_SHORT = "Login: Field length must be in: 3..25";
final String MSG_LOGIN_EMPTY = "Login: Invalid Field Format";
final String MSG_LOGIN_INVALID = "Login: Invalid Field Format";

@DataProvider(name = "wrongLogin")
public Object[][] wrongLoginData() {
	return new Object[][] {
		{"", MSG_LOGIN_EMPTY},
		{"a", MSG_LOGIN_SHORT}, {"gj", MSG_LOGIN_SHORT},
		//5 digits in login
		{"abcd82715efg", MSG_LOGIN_INVALID}, {"h8ijk27lmno15pr", MSG_LOGIN_INVALID},
		//space in login
		{"stuv wx", MSG_LOGIN_INVALID},
		//invalid symbol in login
		{"typical$user", MSG_LOGIN_INVALID}, {"invalid:symbol", MSG_LOGIN_INVALID}
	};
}

@Test(dataProvider = "wrongLogin")
public void negativeWrongLogin(String login, String errorMessage) {
	UserRegistrationPage regPage = pageHelper.navigateToUserRegistrationPage();

	User user = userHelper.generateValidUser();
	user.setLogin(login);
	RegistrationErrorPage errorPage = 
            regPage.incorrectRegistration(user, user.getPassword(), true);

	Assert.assertTrue(
            errorPage.hasErrorFieldWithText(errorMessage),
            "Unable to find error message '" + errorMessage + "' for wrong login '" + login +"'");
}

Теперь буду пробовать для всех полей тесты таким образом описать.


  • 0

#5 clipsa

clipsa

    Специалист

  • Members
  • PipPipPipPipPip
  • 527 сообщений
  • ФИО:Ермолаева Ольга
  • Город:Москва


Отправлено 21 декабря 2015 - 15:52

Если видите, что в ваших тестах что-то повторяется, выносите этот кусок в отдельный параметризированный метод, главное называйте их понятно, чтобы потом не путаться... :)


  • 0

Не следует заставлять тестировщиков тестировать быстрее. Что может быть хуже испуганных, усталых, цинично настроенных тестировщиков?
-----------------
Хорошо, когда человек заводит баги. Плохо, когда баги заводят человека (с)
-----------------
Проект для начинающих тестировщиков Хомячки



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных