我有5个测试套件(即多个类),每个套件都有自己独立的server.start()和stop()以及selenium.start()和stop()。现在,我想要的是:我希望我的脚本在不停止服务器的情况下运行所有测试套件。换句话说,如果你想说,我需要在一个会话中运行多个测试套件。任何人都可以帮我怎么做?
答案 0 :(得分:0)
我真的很想知道你正在使用的测试框架,如Varun所问。如果您使用的是Python,那么您可以查看此示例,该示例运行任何带有_test.py结尾的测试文件。
#!/usr/bin/python27
import os
import sys
failure = False
f = open('test.log', 'w')
xmlHeader = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> """
f.write(xmlHeader)
for dirname, dirnames, filenames in os.walk('.'):
for filename in filenames:
if filename.endswith("_test.py"):
filename = "python27 %s/%s" % (dirname, filename)
testLine = "Running test: " + filename
seperator = "---------------------------------------------------------"
print seperator
print testLine
print seperator
f.write("<testsuite name=\"" +testLine + "\">")
out = os.popen(filename)
outputString = out.read()
print outputString
f.write("""<system-out><![CDATA[""" + outputString + "]]></system-out>")
retval = out.close()
if retval:
failure = True
failString = "FAILURE - test file: " + filename
print failString
f.write("<failure desc=\"" + failString +"\"/>")
f.write("</testsuite>")
f.write("</html>")
if failure:
sys.exit(1)
您可能还想研究设置类似于Jenkins http://jenkins-ci.org/的东西,它可以运行不同的测试套件。
答案 1 :(得分:0)
尝试以下方法。我告诉你这个单位Junit。
如有任何问题,请回复。 最好使用TestNg,因为它可以更灵活地处理和执行测试用例。
答案 2 :(得分:0)
您可以从套件中删除junit和测试套件依赖性 我使用selenium没有任何junit和测试套件 添加一个包含main函数的类,并将函数调用添加到套件的所有类中 像这样定义一个selenium对象 selenium = new DefaultSelenium(serverHost,serverPort,browserStartCommand,browserURL); selenium.start(); 在你的所有测试执行之后 添加selenium.stop();
答案 3 :(得分:0)
要以编程方式执行此操作,您需要创建一个静态变量来保存SeleniumServer实例。
public class SeleniumServerManager {
private static SeleniumServer seleniumServer;
public static void attemptToStartSeleniumServer() throws Exception {
if (null == seleniumServer) {
seleniumServer = new SeleniumServer();
seleniumServer.start();
}
}
}
您必须在所有测试套件中引用它以确保服务器已启动
public class StackOverflowTest extends TestCase {
private Selenium selenium;
@Override
public void setUp() {
SeleniumServerManager.attemptToStartSeleniumServer();
this.selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.stackoverflow.com");
this.selenium.start();
}
public void testStackoverflow() {
this.selenium.open("/");
}
}
如果您不喜欢重复调用#attemptToStartSeleniumServer并在项目中使用Ant或Maven,请查看可以管理您的Server实例的可用Ant任务/ Maven插件。
答案 4 :(得分:0)
添加到讨论中,您可以将Testng框架用于自动化测试。所有测试完成后,您可以在一个类中设置和拆除selenium实例。
class something{
public static Selenium selenium;
public static Selenium globalSeleniumInstance
@BeforeSuite(alwaysRun = true)
public void init(){
selenium = new DefaultSelenium()
globalSeleniumInstance = selenium;
selenium.start();
}
@AfterSuite(alwaysRun = true)
public void destroy() throws Exception {
selenium.stop();
}
Now for you test class you can
@Test(groups = {"myWebsite"}, alwaysRun = true)
public class MyWebsite {
private Selenium selenium;
@BeforeClass(alwaysRun = true)
public void init() {
selenium = ResourceManager.globalSeleniumInstance;
selenium.windowFocus();
selenium.windowMaximize();
}
@Test(alwaysRun = true)
public void lookForRecentPosts() throws Exception {
do something with selenium here
}
}
so in you testng xml file you can add the classes like these
<suite thread-count="1" verbose="1" name="Test Automation Suite"
annotations="JDK" parallel="false">
<test name="Tests" junit="false">
classes>
<class name="com.test.managerclass" />
</classes>
</test>
</suite>