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

Публикации lokofc

76 публикаций создано lokofc (учитываются публикации только с 24 апреля 2023)



#129860 Тестирование Web Api

Отправлено автор: lokofc 21 апреля 2014 - 16:49 в Автоматизированное тестирование

Получил задачу - разработать комплекс автоматизированных тестов для тестирования API веб приложения. Проблема в том, что я не программист и четкого понимания ЧТО тестировать нет, т к не встречался еще с вопросами поломки того или инного веб сервиса и отсюда не могу продумать план тестирования.

 

Объект тестирования: набор веб сервисов, каждый из которых отвечает на запрос объектом JSON.

 

Что уже сделал: пока нагугил валидацию через JSON schema https://code.google....p/rest-assured/. Вроде реализовал и это работает.

 

Суть такая:

 

1) Кидаю запрос сервису

2) Получаю ответ в виде JsonObject

3) Генерирую схему через http://www.jsonschema.net/#

4) Далее в среде(я использую java+junit) подгружаю эту схему и делаю проверку соответствия этой схеме.

 

 

 

import static com.jayway.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
import static org.hamcrest.MatcherAssert.assertThat;


import org.junit.Test;


public class testClass {




    @Test public void
    validates_schema_in_classpath() {
        
        String json = "{\"isSuccess\":false}";// Эта строка с ответом от сервиса


        
        assertThat(json, matchesJsonSchemaInClasspath("greeter-schema.json"));
    }
}
greeter-schema.json:

{
"type":"object",
"$schema": "http://json-schema.org/draft-03/schema",
"id": "http://jsonschema.net",
"required":true,
"properties":{
"isSuccess": {
"type":"string",
"id": "http://jsonschema.net/isSuccess",
"required":true
}
}
}
 

Но с помощью этого я могу осуществлять только проверку типов атрибутов объекта JSON, конкретно в этой схеме я проверяю boolean ли у атрибута isSuccess. Здесь не решается вопрос проверки структуры  ответа. Например, я могу поменять строку с ответом на такую String json = "{\"isSuccess\":false},testestestest"; и тест успешно пройдет. 

Достаточно ли этой валидации ? Нужно ли как-то проверять содержимое объекта, например на количество атрибутов ?




#126706 Проблемы с кодировкой при сборке на TeamCity

Отправлено автор: lokofc 07 февраля 2014 - 12:19 в Selenium - Functional Testing

Решено.

<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}" encoding="Windows-1251"></javac>



#126699 Проблемы с кодировкой при сборке на TeamCity

Отправлено автор: lokofc 07 февраля 2014 - 09:11 в Selenium - Functional Testing

Добавил в настройках build step шаг build, и кириллица перестала работать. Ранее я собирал локально через eclipse, а черех TC только прогонял тесты - поэтому было все хорошо.

 

Кто - нибудь знает как правильно задать кодировку шагу build ?

 

пишу на java, соответственно собираю при помощи ant




#126432 Java robot на удаленном сервере

Отправлено автор: lokofc 31 января 2014 - 13:34 в Selenium - Functional Testing

активация сессии VNC действительно помогла, большое спасибо.




#126267 Java robot на удаленном сервере

Отправлено автор: lokofc 28 января 2014 - 09:10 в Selenium - Functional Testing

сделал с помощью autoit4java, использовал метод winActivate(). Пока подключение активно и я наблюдаю за тестом - всё работает (сворачиваю хром, он разворачивается, робот работает), но только отключаюсь от удаленки  и все, не работает, такое ощущение, что дело не в активности окна.




#126233 Java robot на удаленном сервере

Отправлено автор: lokofc 27 января 2014 - 13:49 в Selenium - Functional Testing

Тогда такой вопрос, как можно активировать окно хрома ? Конечно, это можно делать вручную, но тогда смысла в тим сити то нет. Я могу и с рабочего стола тесты гонять.




#126209 Java robot на удаленном сервере

Отправлено автор: lokofc 27 января 2014 - 09:31 в Selenium - Functional Testing

Всем доброго времени суток !

 

Запускаю тесты через TeamCity, проект с тестами находится на удаленном сервере. Проблема в том, что Java Robot работает очень не стабильно и падает по непонятным причинам. Гуглил это вопрос, решение казалось бы нашел - нужно запускать билд агент не как сервис, а как приложение, но и это не помогло, все равно этот робот иногда не работает. Замечаю, что число падений, когда подключение неактивно стремится к 100%, при активном падений меньше, но все равно присутствуют.

 

Как возможное решение - использовать аналог класса Java Robot, но ничего толкового найти не могу, класс Actions мне не поможет, т к в сценариях нужно прикреплять файлы (работать с окнами винды)




#125098 Запуск одного теста более 1 раза

Отправлено автор: lokofc 16 декабря 2013 - 16:29 в Selenium - Functional Testing

Всем доброго времени суток.
Использую WebDriver + Junit + Java
Сталкивался ли кто-либо со следующей задачей:
Мне необходимо понять присутствует ли вероятность рандомного падения тестов. А для этого нужно запускать мои тесты (пусть их 10 штук) по 100 раз каждый и считать число падений.

На данный момент реализовал очень колхозно(нужно сделать срочно, а лучше я не придумал) :

1) переписал листеннера, который логгирует общее число тестов и число упавших.

2) Создал класс, в него напихал все свои тесты по 20 раз каждый (да это очень убого, но лучше не умею)
Выгляти это примерно так
@RunWith(SeleniumRunner.class)
public class test {

@Test    
    public void test1(){
        DocumentRegistration ww = new DocumentRegistration(driver);
        ww.NewSimpleTask(); 
}
@Test    
    public void test1(){

        DocumentRegistration ww = new DocumentRegistration(driver);
        ww.NewSimpleTask();
}
@Test    
    public void test1(){

        DocumentRegistration ww = new DocumentRegistration(driver);
        ww.NewSimpleTask();
}
.
.
.
.
 и тд


}

Это работает, но может кто-нибудь знает как по-нормальному можно решить эту задачу ? Пытался также привлечь Junit reporter, но он, зараза, каждый раз переписывает результаты теста и в итоге статистики мне не получить.



#123655 Как поймать исключение?

Отправлено автор: lokofc 01 ноября 2013 - 15:48 в SmartBear (AutomatedQA) - Functional Testing

Хочу поймать исключение, которое вылетает, если объект не найден, шлепнуть скрин и просто продолжить дальше, например:

try { //do smht}
catch(e) {Log.Picture(obj)}

но почемуто блок catch не выполняется, когда вылетает ошибка "Не найден объект"



#123135 Подключение к MS Sql server

Отправлено автор: lokofc 21 октября 2013 - 13:07 в SmartBear (AutomatedQA) - Functional Testing

решил проблему созданием DSN линка и использованием его в качестве дата сорса

aTable.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=sql";



#123131 Подключение к MS Sql server

Отправлено автор: lokofc 21 октября 2013 - 12:32 в SmartBear (AutomatedQA) - Functional Testing


Provider нужен, насколько я помню.

И покажите кусок вашего кода, где прописывается коннекшн строка

(я просто подозреваю, что может быть элементарная ошибка типа неэкранированного слеша)


aTable.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=DbName;Integrated Security=True";



#123128 Подключение к MS Sql server

Отправлено автор: lokofc 21 октября 2013 - 12:26 в SmartBear (AutomatedQA) - Functional Testing

Использую TC7, объект Ado, как написанно в хелпе, но не могу приконнектиться в бд

connectionString беру тот же, что использует приложение, его формат такой:

<connectionstring value="Data Source=.\SQLEXPRESS;Initial Catalog=DBname;Integrated Security=True"/>

Постоянно выкидывает ошибку Multiple-step OLE DB operation generated errors.

Есть два вопроса:

1) Правильно ли я указываю конекшн стринг? В примере есть еще параметр Provider

2) Как проверить правильно ли я устновил MDAC? т к после запуска скачанного екзешника ничего не произошло, как-будто он не установился. В реестре смотрел запись Data Access Version указана 6.1.7601.17514 и она совсем не похожа на 2.8



#122911 Как добраться до текста

Отправлено автор: lokofc 16 октября 2013 - 17:38 в SmartBear (AutomatedQA) - Functional Testing

Прежде всего, так как у вас .NET приложение, у вас есть доступ абсолютно ко всем внутренним свойствам и методам.
Чтобы получить представление о том, как работать с ними, посмотрите вот это видео.

Теоретически у вас может быть еще одна проблема: обфусцированное приложение. Тогда используйте text Recognition и/или OCR. Оба подхода описаны здесь.


На видео тестируется дот.Нет приложение и в дереве все иконки с соответствующей символикой. У меня почему-то иконки как у вин32 приложений(например калькулятора). Да и методы работают как и для калькулятора. Параметр isOpen установлен в True, но всех методов я не вижу. Это значит, что приложение обфусцированное ?



#122908 Как добраться до текста

Отправлено автор: lokofc 16 октября 2013 - 16:59 в SmartBear (AutomatedQA) - Functional Testing

Суть проблема в следующем:

Есть форма (см скрин) и она не содержит никаких дочерних элементов. Однако в зависимости от обстоятельств внутри формы может быть целый список параметров, значение которых хотелось бы проверить.

Строки - это объекты типа row, не текст.

Есть ли какая-то возможность достучаться до текста на этой форме и проверить его? (Почему-то мне кажется что нет)

Приложение написано на dotNet платформе. Кстати, хоть оно и дотНет, но обычные методы WaitChild почему-то работают. Может оно просто не до конца распознается ?

Использую JScript

Прикрепленные изображения

  • 2.png



#122898 Aliases

Отправлено автор: lokofc 16 октября 2013 - 13:17 в SmartBear (AutomatedQA) - Functional Testing

На первых парах использование alieases сильно мешает пониманию записанного скрипта.

Есть ли возможность отключить их при записи? В учебнике написано, что отключить можно здесь tools=>Engine. Но в тк 7 я не вижу такого пункта



#121280 Element not clickable

Отправлено автор: lokofc 27 августа 2013 - 11:43 в Selenium - Functional Testing

Selenium 2.35.0
Chrome Версия 29.0.1547.57 m
Chromedriver=2.0

 
     public void ProjectSelectMethod(String projectclick, String projectname) throws InterruptedException, MyBugException, AWTException {
    	 
    	 int Pause=30;
    	 driver.findElement(By.xpath(projectclick)).click();
         (new WebDriverWait(driver, Pause))
         .until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".k-grid-string-column")));
         (new WebDriverWait(driver, Pause))
         .until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".k-grid-string-column")));
         
         //Thread.sleep(2000);
       
         driver.findElement(By.xpath("//input[@class='k-textbox'][@value='']")).click();
         driver.findElement(By.xpath("//input[@class='k-textbox'][@value='']")).sendKeys(projectname);
         driver.findElement(By.xpath("//button[@data-commandname='searchBySubstr']")).click();
      
         
         WebDriverWait wait = new WebDriverWait(driver, 20);
         final WebElement kload = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() { // Вот здесь at DocumentRegistration.ProjectSelect.ProjectSelectMethod(ProjectSelect.java:96)

                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !kload.isDisplayed();
                                 }
                         });
                  
         /* driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
          (new WebDriverWait(driver, Pause))
          .until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".k-grid-string-column")));
          (new WebDriverWait(driver, Pause))
          .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//td[.='тест1']")));          
         Thread.sleep(3000);
         
         ElementPolling polling=new ElementPolling(driver);
         String elementPath="//td[.='"+projectname+"']";
         int timeout=60;
         polling.ElementPolling(elementPath, timeout);
         */
     
         

         driver.findElement(By.xpath("//td[.='"+projectname+"']")).click();
         driver.findElement(By.xpath("//button[@data-commandname='accept']")).click();
         Thread.sleep(1000);
         

}

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=29.0.1547.57)
  (Driver info: chromedriver=2.0,platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 41 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0'
Session ID: ee131a91395abfaeefd890e9d41b6bd9
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={chromedriverVersion=2.0}, rotatable=false, locationContextEnabled=true, version=29.0.1547.57, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
	at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
	at org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:320)
	at DocumentRegistration.ProjectSelect$1.apply(ProjectSelect.java:99)
	at DocumentRegistration.ProjectSelect$1.apply(ProjectSelect.java:1)
	at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
	at DocumentRegistration.ProjectSelect.ProjectSelectMethod(ProjectSelect.java:96)
	at DocumentRegistration.AktSAgentom.AktSAgentomTest(AktSAgentom.java:114)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)





#121276 Element not clickable

Отправлено автор: lokofc 27 августа 2013 - 10:30 в Selenium - Functional Testing

Тут проблема не в синтаксисе, просто это ожидание не работает



#121270 Element not clickable

Отправлено автор: lokofc 27 августа 2013 - 08:57 в Selenium - Functional Testing

На Ваш вариант ругается компилятор.

Такой вариант выкидывает ошибку:
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

         WebDriverWait wait = new WebDriverWait(driver, 20);
         final WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() {//в этой строке ошибка
                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !(kload.isDisplayed());
                                 }
                         });

Такой вариант выкидывает NoSuchElement, т к пытается найти kload, а его уже нет

WebDriverWait wait = new WebDriverWait(driver, 20);
         WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() {
                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !(driver.findElement(By.xpath("//div[@class='k-loading-image']")).isDisplayed());//Вот здесь ошибка
                                 }
                         });



#121258 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 16:46 в Selenium - Functional Testing

@vmaximv, если Вы не хотите помогать, не помогайте. Я уже приводил выше кусок кода, который четко следует этой последовательности и он не работает.

try { 
        	  
        	   driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//Ждем этот элемент в течении 3 сек чтобы не затормаживать кейс, если вдруг элемента нет. Можно накать и явную ждалку - результат тотже
	           WebElement kload=driver.findElement(By.xpath("//div[@class='k-loading-image']"));
	           System.out.println(kload.isDisplayed());
	           
	           if (kload.isDisplayed())	{ 	//Проверяем видимость
	        	   
	          (new WebDriverWait(driver, Pause))
	          .until(ExpectedConditions.invisibilityOfElementLocated/stalenessOf(By.xpath("//div[@class='k-loading-image']")));//Если видим, ждем пропадание/невидимости
	          
	          } 
          }
          catch (NoSuchElementException e) {} //ловим експешн, если вдруг элемент не обнаружен       
          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);//Устанавливает обратно дефолтный таймаут



#121252 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 15:18 в Selenium - Functional Testing

В css пусто

Прикрепленные изображения

  • 24.png



#121250 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 14:36 в Selenium - Functional Testing

Нет, это вообще не вариант, не знаю почему, но элемент эти проверки проходит, но не пропадает



#121248 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 14:10 в Selenium - Functional Testing


А удаление не помогло, или я опять что-то не понял. Этот элемент присутствует в дом только короткий промежуток времени, пока грузится список. Получается, что вызывать JS и удалять этот элемент нужно имеено в этот момент? Иначе элемента нет в дом и непонятно что удаляется

Может стоит решить задачу по другому? Неужели стандартных функций WebDriver'a недостаточно чтобы дождаться появления\пропадания нужного элемента и кликнуть по нему? Обязательно городить через циклы и thread.sleep? Помимо isDisplayed, есть же еще такой ExpectedConditions как elementToBeClickable.


Ни один из стандартных методов мне не помогает. Написанное мною ожидание:
    try { 
        	  
        	   driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//Делаю чтобы метод find не так долго искал элемент
	           WebElement kload=driver.findElement(By.xpath("//div[@class='k-loading-image']"));
	           System.out.println(kload.isDisplayed());//Проверяем видимость
	          if (kload.isDisplayed()){ 		//если элемент виден - ждем до пропадания из дом
	          (new WebDriverWait(driver, Pause))
	          .until(ExpectedConditions.stalenessOf(kload));
	          } 
          }
          catch (NoSuchElementException e) {}        
          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
//возвращаем стандартный тайм аут

Работает это хреново



#121245 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 13:38 в Selenium - Functional Testing

А удаление не помогло, или я опять что-то не понял. Этот элемент присутствует в дом только короткий промежуток времени, пока грузится список. Получается, что вызывать JS и удалять этот элемент нужно имеено в этот момент? Иначе элемента нет в дом и непонятно что удаляется



#121235 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 11:04 в Selenium - Functional Testing

Осталось понять как это сделать на java



#121224 Element not clickable

Отправлено автор: lokofc 26 августа 2013 - 09:12 в Selenium - Functional Testing


По этому пути располагается 1 элемент. Вся проблема в другом элементе, который его перекрывает буквально 1-2 секунды. Нужно какое-то работающее ожидание на пропадание его, но вот какое - хрен знает, мое не работает

Так просто удалить через JavaScript перекрывающий элемент нельзя? Он критичен для кейса?


Не критичен. Где можно почитать про удаление элеементов?