Как и зачем делать свой framework
                        Как это делает Артем Розуменко

Dnepr mini conference                           10/29/2011   1
Начало...




            ...тваю ж ... и че мне с этим делать?

Dnepr mini conference                               2
Попытка не пытка ... шаг 1

JUnit + Selenium
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class NewTest extends SeleneseTestCase
{
             public void setUp() throws Exception {                                      Локаторы   в коде
                          setUp("http://www.google.com/", "*firefox");
             }
             public void testNew() throws Exception {
                          selenium.open("/");
                          selenium.type("q", "selenium rc");
                          selenium.click("btnG");
                          selenium.waitForPageToLoad("30000");
                          assertTrue(selenium.isTextPresent("Results * for selenium rc"));
             }
}                                                                              Пользовательские
                                                                              настройки и данные
                                                                                    зашиты

    Dnepr mini conference                                                                                    3
Отделить мух от котлет
Locators.properties

URL = http://www.google.com
input_fld = q
Srch_btn = BtnG


                                                                                      User.properties

                                                                          Browser = *firefox
                                                                          Text_4_srch = selenium rc
                                                                          Pageload = 30000
                                                                          Result_txt = Results * for selenium rc


      public void setUp() throws Exception {
                   setUp(getProperty(“URL”), getData(“Browser”));
      }
      public void testNew() throws Exception {
                   selenium.open("/");
                   selenium.type(getProperty(“input_fld”), getData(“Text_4_srch”));
                   selenium.click(getProperty(“Srch_btn”));
                   selenium.waitForPageToLoad(getData(“Pageload”));
                   assertTrue(selenium.isTextPresent(getData(“Result_txt”));
      }


     Dnepr mini conference                                                                                   4
Попытка не пытка ... шаг 2
Registration.java    Send mail. java    Receive mail. java




@before class
public void setUp() throws Exception {
…}
@test
public void openGoogle() throws Exception {
…}
@test
public void search4RC() throws Exception {
…}
@test
public void openGmail() throws Exception(){
…}
@test
public void createAcc() throws Exception(){
…}
@test
public void doCreated() throws Exception(){
…}
@test……
@test
public void deleteAcc() throws Exception(){
…}




          Как-то много повторений одних и тех же действий ... хмм
      Dnepr mini conference                                         5
Убрать повторения



@test
public void openGmail() throws Exception(){
…}
@test
public void createAcc() throws Exception(){
…}
@test
public void doCreated() throws Exception(){
…}
@test
public void deleteAcc() throws Exception(){
…}
@test
public void doDeleted() throws Exception(){
…}



                                          Helper.RegisterNewUser(String userName, String pwd)
                                          Helper.DeleteUser(String userName, String pwd)

    Dnepr mini conference                                                               6
И что же получается?
                         Програмный код
              Тест 1               Це                 Helper 1
                             дальссе, насяльн
              Тест 2                                  Helper 2
                                  ика?
              Тест 3                                  Helper 3
              Тест 4                                  Helper 4
              Тест 5                                  Helper 5
              Тест 6                                  Helper 6
              Тест 7                                  Helper 7




        Locator.properties                      User.properties



Footer Text                                                       7
Опять мухи и котлеты
        Тесты                    Програмный код

          Тест 1                Helper 1   Helper 4

          Тест 2                Helper 2   Helper 5

          Тест 3                Helper 3   Helper 6

          Тест 4
                        GMail
          Тест 5
          Тест 6
          Тест 7


  Locator.properties


    User.properties

Dnepr mini conference                                 8
И как это выглядит?

    Test.xls       Locator.prop    User.prop
                                                  Code.jar




  CMD
    C:/>java –jar code.jar




                                                Report in
      Detailed         Full size                mail with
     Report.html     screenshots                  small
                                               screenshots



Footer Text                                              10/31/2011   9
Зачем это все делать?
Цели которые стоит преследовать при создании:
1. Цена внесения изменений.
    1.1. Если надо добавить тесты, это делается без
    вмешательства в код
    1.2. Если надо изменить код, то при этом не затрагиваются
    тесты
2. Способность интеграции в continues integration model.

3. Развертывание окружения для проведения автоматизированного
тестирования должно занимать минимум времени и требовать
минимум вспомагательного ПО.

4. Репортинг должен быть полным, понятным и таким, который
можно показать не только команде, но и заказчику.




 Dnepr mini conference                                          10
Всем спасибо, вопросы в
        студию.

                                            С вами был
                                Артем Розуменко
                        Email: artyom.rozumenko@gmail.com
                          Web: http://qastories.blogspot.com
Dnepr mini conference                              10/31/2011   11

Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"

  • 1.
    Как и зачемделать свой framework Как это делает Артем Розуменко Dnepr mini conference 10/29/2011 1
  • 2.
    Начало... ...тваю ж ... и че мне с этим делать? Dnepr mini conference 2
  • 3.
    Попытка не пытка... шаг 1 JUnit + Selenium package com.example.tests; import com.thoughtworks.selenium.*; import java.util.regex.Pattern; public class NewTest extends SeleneseTestCase { public void setUp() throws Exception { Локаторы в коде setUp("http://www.google.com/", "*firefox"); } public void testNew() throws Exception { selenium.open("/"); selenium.type("q", "selenium rc"); selenium.click("btnG"); selenium.waitForPageToLoad("30000"); assertTrue(selenium.isTextPresent("Results * for selenium rc")); } } Пользовательские настройки и данные зашиты Dnepr mini conference 3
  • 4.
    Отделить мух откотлет Locators.properties URL = http://www.google.com input_fld = q Srch_btn = BtnG User.properties Browser = *firefox Text_4_srch = selenium rc Pageload = 30000 Result_txt = Results * for selenium rc public void setUp() throws Exception { setUp(getProperty(“URL”), getData(“Browser”)); } public void testNew() throws Exception { selenium.open("/"); selenium.type(getProperty(“input_fld”), getData(“Text_4_srch”)); selenium.click(getProperty(“Srch_btn”)); selenium.waitForPageToLoad(getData(“Pageload”)); assertTrue(selenium.isTextPresent(getData(“Result_txt”)); } Dnepr mini conference 4
  • 5.
    Попытка не пытка... шаг 2 Registration.java Send mail. java Receive mail. java @before class public void setUp() throws Exception { …} @test public void openGoogle() throws Exception { …} @test public void search4RC() throws Exception { …} @test public void openGmail() throws Exception(){ …} @test public void createAcc() throws Exception(){ …} @test public void doCreated() throws Exception(){ …} @test…… @test public void deleteAcc() throws Exception(){ …} Как-то много повторений одних и тех же действий ... хмм Dnepr mini conference 5
  • 6.
    Убрать повторения @test public voidopenGmail() throws Exception(){ …} @test public void createAcc() throws Exception(){ …} @test public void doCreated() throws Exception(){ …} @test public void deleteAcc() throws Exception(){ …} @test public void doDeleted() throws Exception(){ …} Helper.RegisterNewUser(String userName, String pwd) Helper.DeleteUser(String userName, String pwd) Dnepr mini conference 6
  • 7.
    И что жеполучается? Програмный код Тест 1 Це Helper 1 дальссе, насяльн Тест 2 Helper 2 ика? Тест 3 Helper 3 Тест 4 Helper 4 Тест 5 Helper 5 Тест 6 Helper 6 Тест 7 Helper 7 Locator.properties User.properties Footer Text 7
  • 8.
    Опять мухи икотлеты Тесты Програмный код Тест 1 Helper 1 Helper 4 Тест 2 Helper 2 Helper 5 Тест 3 Helper 3 Helper 6 Тест 4 GMail Тест 5 Тест 6 Тест 7 Locator.properties User.properties Dnepr mini conference 8
  • 9.
    И как этовыглядит? Test.xls Locator.prop User.prop Code.jar CMD C:/>java –jar code.jar Report in Detailed Full size mail with Report.html screenshots small screenshots Footer Text 10/31/2011 9
  • 10.
    Зачем это вседелать? Цели которые стоит преследовать при создании: 1. Цена внесения изменений. 1.1. Если надо добавить тесты, это делается без вмешательства в код 1.2. Если надо изменить код, то при этом не затрагиваются тесты 2. Способность интеграции в continues integration model. 3. Развертывание окружения для проведения автоматизированного тестирования должно занимать минимум времени и требовать минимум вспомагательного ПО. 4. Репортинг должен быть полным, понятным и таким, который можно показать не только команде, но и заказчику. Dnepr mini conference 10
  • 11.
    Всем спасибо, вопросыв студию. С вами был Артем Розуменко Email: artyom.rozumenko@gmail.com Web: http://qastories.blogspot.com Dnepr mini conference 10/31/2011 11