Отправляет email-рассылки с помощью сервиса Sendsay

Записки о тестировании ПО

  Все выпуски  

Записки тестера Простые правила написания функциональных автотестов.


1) Имя тестового метода должно ясно описывать, что этот тест делает. Например имя testLogin более информативно, чем test1_1. Какие плюсы могут быть от такого именования? Вам будет проще ориентироваться в тестах. Другим будет проще их использовать и поддерживать

2) Лишняя логика в тестовом методе будет только усложнять его. Посмотрим на следующий тест :

public testPostMessage() {
    selenium.type("id=title", "Hello world");
    selenium.type("id=text", "and everybody!!!");
    for (int i = 0; i < 3; i++) {
        selenium.type("id=tags" + i, "test post" + i);
    }
    selenium.select("id=access", "label=all");
    selenium.click("id=submit");
}


Даже с простыми idшками не сразу можно понять что происходит в этом тесте. Немного упростим его :

private void setMessageTitle(String title) {
    selenium.type("id=title", title);
}

private void setMessageText(String text) {
    selenium.type("id=text", text);
}

private void setMessageTags(String tag){
    for (int i = 0; i < 3; i++) {
        selenium.type("id=tags" + i, tag + i);
    }
}

private void setMessageAccess(String access){
    selenium.select("id=access", "label=" + access);
}

private void submit(){
    selenium.click("id=submit");
}

public testPostMessage() {
    setMessageTitle("Hello world");
    setMessageText("and everybody!!!");
    setMessageTags("test post")
    setMessageAccess("all")
    submit();
}

Код увеличился в размере, но при этом стал более понятным.

3) Тестовый метод должен быть коротким настолько, насколько это возможно. Основной плюс опять же в простоте понимания такого теста. Есть у меня два теста :

public void testLogin() {
    goToLoginForm();
    enterLogin();
    enterPass();
    clickLogin();
    assertTrue(isLoggedIn());
}


и

private void login() {
    goToLoginForm();
    enterLogin();
    enterPass();
    clickLogin();
}

public void testLogin() {
    login();
    assertTrue(isLoggedIn());
}


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

4) С помощью констант можно сделать тестовые методы более понятными. Есть следующий тест :

public void testPassword() {
    assertTrue(login.isPasswordValid("qwerty"));
    assertFalse(login.isPasswordValid("asdf"));
}

Добавим в него несколько констант, и код станет более понятным :

String validPassword = "qwerty";
String inValidPassword = "asdf";

public void testPassword() {
    assertTrue(login.isPasswordValid(validPassword));
    assertFalse(login.isPasswordValid(inValidPassword));
}

Успехов в автоматизации.

Константин.

http://swtesting.livejournal.com

В избранное