
отделение данных от теста
#1
Отправлено 19 июля 2012 - 14:39
#2
Отправлено 19 июля 2012 - 15:11
Как отделить данные от теста? Например, чтобы имя пользователя и пароль находились отдельно, а не так driver.findElement(By.id("forlogin")).sendKeys("keja04");
Существует огромное число вариантов:
а)использовать проперти-файлы
б)создавать классы с константами
в)xml
....
Завтра, если не забуду, распишу подробно
#3
Отправлено 20 июля 2012 - 07:01
а)правая кнопка по проекту NEW--FILE
б)создать файл system.properties
в)открыть его
г)заполнить такими данными
#login - решетка это комментарии !!!
login = keja04 #никаких кавычек не нужно !!!
д)создать метод
public static String getDataProperties (String param) throws Exception {
Properties props=new Properties();
props.load(new InputStreamReader(new FileInputStream("system.properties"), "UTF-8"));
return props.getProperty(param);
}
е)Теперь, чтобы взять данные из проперти,
используем ИмяКласса.getDataProperties('login ')
кавычки обязательно использовать
ж)Проблема с русскими буквами при сохранении выдаст ошибку:
поэтому кликай на кнопку "Save in UTF-8" как-то так называется
и ты сможешь брать русские буквы
#4
Отправлено 23 июля 2012 - 03:08
#5
Отправлено 23 июля 2012 - 09:02
Для Java можно использовать библиотеку apache poi.
#6
Отправлено 24 июля 2012 - 20:18
#7
Отправлено 28 сентября 2012 - 14:02
е)Теперь, чтобы взять данные из проперти,
используем ИмяКласса.getDataProperties('login ')
кавычки обязательно использовать
Добрый день,
Спасибо за информаци.
А не подскажете, как из другого класса вызвать значение поля login?
Я написал код
package com.example.tests;
public class TestTest {
public static void main(String[] args) throws Exception {
String loginValue = PropertiesReaderThird.getDataProperties("login");
System.out.println(loginValue );
}
}
А мне возвращается null (
#8
Отправлено 01 октября 2012 - 06:26
Вы точно сделали все импорты ?
Скиньте весь код, который у вас есть.
#9
Отправлено 01 октября 2012 - 11:55
PropertiesReaderThird - это название другого класса, если ДА, то я не вижу ошибок.
Вы точно сделали все импорты ?
Скиньте весь код, который у вас есть.
Большое Вам спасибо за ответ.
Я протормозил и в String loginValue = PropertiesReaderThird.getDataProperties("browser"); указывал вместо "browser" несуществующий в файле пропертиз параметр.
Можно задать Вам ещё один вопрос? Сейчас у меня получается получить поля browser, port, url из файла properties.
И начинается самое интересное. Как их передать методу, который будет вызывать Selenium?
public class startSelenium {
protected static DefaultSelenium selenium;
@BeforeSuite
public void setUp(String browser, int port, String url) throws Exception {
selenium = new DefaultSelenium("localhost", port, browser, url);
selenium.start();
}
@AfterSuite
public void tearDown() throws Exception {
selenium.stop();
}
}
Когда я пытаюсь вызвать из этого класса например String browser = PropertiesReaderThird.getDataProperties("browser"); - у меня выходит ошибка (
#10
Отправлено 01 октября 2012 - 12:18
В метод SetUp не надо ничего передавать
selenium = new DefaultSelenium(ИмяКласса.getDataProperties("Server"), ИмяКласса.getDataProperties("Port") и т.п.
А у вас вообще как-то странно написано:
public void setUp(String browser, int port, String url) throws Exception {
selenium = new DefaultSelenium("localhost", port, browser, url);
}
Где Ваш метод возьмет данные для порта, браузера и урла ?
#11
Отправлено 02 октября 2012 - 11:19
Вы используете Selenium RC
В метод SetUp не надо ничего передавать
selenium = new DefaultSelenium(ИмяКласса.getDataProperties("Server"), ИмяКласса.getDataProperties("Port") и т.п.
А у вас вообще как-то странно написано:
public void setUp(String browser, int port, String url) throws Exception {
selenium = new DefaultSelenium("localhost", port, browser, url);
}
Где Ваш метод возьмет данные для порта, браузера и урла ?
User12, спасибо большое за советы. Вы помогли мне невероятным образом.
Да, я использую RC, хочу понять как он работает.
По поводу того, где брать параметры на вход. Вот смотрите, долго мучился но получил в итоге работающий код. В нём на вход методу setUp подаём переменную propertiesData.
public class PropsReader {
protected static DefaultSelenium selenium;
@Parameters ({ "propertiesData"})
@BeforeSuite
public void setUp (@Optional String propertiesData) throws Exception {
if (propertiesData == null){
propertiesData = "application.properties";
}
String cmdLineFile = System.getProperty("propertiesExternalData");
if (cmdLineFile !=null){
propertiesData= cmdLineFile;
}
Properties props = new Properties();
props.load(new FileInputStream(propertiesData));
int port = Integer.parseInt(props.getProperty("port"));
selenium = new DefaultSelenium("localhost", port, props.getProperty("browser"), props.getProperty("url"));
selenium.start();
}
Зачем я всё это наделал.
Я хочу попробовать запустить из командной строки тестовый набор в формате: набор "браузер, порт и урл из файла external.properties" + набор тестов из файла скажем test.xml.
И вот теперь не пойму, как мне это сделать, не будете ли Вы столь любезны, что подскажете как? Точнее, написать соответствующий bat-файл.
Мне приходит в голову только java -DpropertiesExternalData=external.properties, но вот что там дальше писать?
P.S. Чтобы можно было запускать тесты из эклипса, пишу propertiesData = "application.properties";
#12
Отправлено 02 октября 2012 - 13:11
set javaTestProjectPath=d:\testing\automatedtesting\Eclipse\workspace\My project\
set TESTNGFILE=test.xml
set path=c:\Program Files\Java\jre7\bin\
set SELENIUM_HOME=d:\testing\automatedtesting\distr\selenium-java-2.25.0\selenium-2.25.0
set TESTNG_HOME=d:\testing\automatedtesting\Eclipse\plugins\org.testng.eclipse_6.7.0.20120715_0816
set CLASSPATH=%javaTestProjectPath%\bin;%TESTNG_HOME%\lib\testng.jar;%SELENIUM_HOME%\selenium-java-2.25.0.jar;%SELENIUM_HOME%\libs\*.jar
java org.testng.TestNG %* class.xml
Запускаю - oткрывается на секунду черное окно и сразу закрывается (
Что я не так делаю? В самом эклипсе тесты запускаются нормально.
В логах в test-output читаю
<?xml version="1.0" encoding="UTF-8" ?>
- <testng-results skipped="1" failed="0" total="1" passed="0">
<reporter-output />
- <suite name="Default suite" duration-ms="7" started-at="2012-10-02T14:05:57Z" finished-at="2012-10-02T14:05:57Z">
- <groups>
- <group name="BUG">
<method signature="addNewAccount.testAddNewGroup()[pri:0, instance:com.example.tests.addNewAccount@1557ee8]" name="testAddNewGroup" class="com.example.tests.addNewAccount" />
</group>
- <!-- BUG
-->
</groups>
- <test name="Default test" duration-ms="7" started-at="2012-10-02T14:05:57Z" finished-at="2012-10-02T14:05:57Z">
- <class name="com.example.tests.addNewAccount">
- <test-method status="FAIL" signature="setUp(java.lang.String, int, java.lang.String)[pri:0, instance:com.example.tests.addNewAccount@1557ee8]" name="setUp" is-config="true" duration-ms="0" started-at="2012-10-02T21:05:57Z" finished-at="2012-10-02T21:05:57Z">
- <params>
+ <param index="0">
- <value>
- <![CDATA[ *iexplore
]]>
</value>
</param>
- <param index="1">
- <value>
- <![CDATA[ 4444
]]>
</value>
</param>
- <param index="2">
- <value>
- <![CDATA[ http://www.google.ru
]]>
</value>
</param>
</params>
- <exception class="java.lang.NoClassDefFoundError">
- <message>
- <![CDATA[ com/google/common/base/Charsets
]]>
</message>
- <full-stacktrace>
- <![CDATA[
java.lang.NoClassDefFoundError: com/google/common/base/Charsets
at com.thoughtworks.selenium.HttpCommandProcessor.getOutputStreamWriter(HttpCommandProcessor.java:149)
at com.thoughtworks.selenium.HttpCommandProcessor.getCommandResponseAsString(HttpCommandProcessor.java:176)
at com.thoughtworks.selenium.HttpCommandProcessor.executeCommandOnServlet(HttpCommandProcessor.java:118)
at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:101)
at com.thoughtworks.selenium.HttpCommandProcessor.getString(HttpCommandProcessor.java:275)
at com.thoughtworks.selenium.HttpCommandProcessor.start(HttpCommandProcessor.java:237)
at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:100)
at com.example.tests.testBase.setUp(testBase.java:26)
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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:277)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:51)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:85)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.TestNG.privateMain(TestNG.java:1337)
at org.testng.TestNG.main(TestNG.java:1306)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Charsets
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 25 more
]]>
</full-stacktrace>
</exception>
- <!-- java.lang.NoClassDefFoundError
-->
<reporter-output />
</test-method>
- <!-- setUp
-->
- <test-method status="SKIP" signature="testAddNewGroup()[pri:0, instance:com.example.tests.addNewAccount@1557ee8]" name="testAddNewGroup" duration-ms="0" started-at="2012-10-02T21:05:57Z" finished-at="2012-10-02T21:05:57Z">
<reporter-output />
</test-method>
- <!-- testAddNewGroup
-->
- <test-method status="SKIP" signature="tearDown()[pri:0, instance:com.example.tests.addNewAccount@1557ee8]" name="tearDown" is-config="true" duration-ms="0" started-at="2012-10-02T21:05:57Z" finished-at="2012-10-02T21:05:57Z">
<reporter-output />
</test-method>
- <!-- tearDown
-->
</class>
- <!-- com.example.tests.addNewAccount
-->
</test>
- <!-- Default test
-->
</suite>
- <!-- Default suite
-->
</testng-results>
#13
Отправлено 02 октября 2012 - 15:15
class HelloWorld { public static void main(String[] args) { Запустить.Тест(МойТест.class) } }всё это компилировал и получал выполняемый файл, который запускал тест(ы) по щелчку мышки (просто выполняемый файл). Строчка String[] args читает командную строку, разделяет по слову и записывает в масив args. Достать переменные из масива не проблема, потом можно присвоить каждый элемент масива переменной как у вас и передать их в setUp()
если заинтересовало - выложу код завтра\послезавтра
#14
Отправлено 03 октября 2012 - 05:00
я могу предложить вариант, но это тоже будет через жопу. Я использовал класс ТестРанер или как-то так. Писал тесты на РС, создавал файл
class HelloWorld { public static void main(String[] args) { Запустить.Тест(МойТест.class) } }всё это компилировал и получал выполняемый файл, который запускал тест(ы) по щелчку мышки (просто выполняемый файл). Строчка String[] args читает командную строку, разделяет по слову и записывает в масив args. Достать переменные из масива не проблема, потом можно присвоить каждый элемент масива переменной как у вас и передать их в setUp()
если заинтересовало - выложу код завтра\послезавтра
Да, спасибо, я был бы очень признательным за код )
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных