Html /javascript共享脚本列表..或者用茉莉花和硒做CI
html/javascript sharing script lists... or doing CI with jasmine and selenium
我是js + html的新手。我已经使用jasmine设置了一些基于(extjs) js的验收测试,现在正在考虑为它们设置持续集成设置。
因为它们在浏览器中运行,所以要让它们在CI下运行会有一些麻烦。我想做的是使用selenium来运行测试(我们已经有了一个工作的selenium设置,所以应该很容易),并使用jasmine-reporter将结果输出到CruiseControl.net可以理解的文件中。
Jasmine的工作方式非常直接,你最终会编写一个看起来像这样的html页面:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jasmine Spec Runner v2.0.0</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css">
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
<script type="text/javascript">
//set this a bit higher to aid debugging
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
</script>
<!-- include source files here... -->
<script type="text/javascript" src="Sample/src/Player.js"></script>
<script type="text/javascript" src="Sample/src/Song.js"></script>
<script type="text/javascript" src="/native/WeatherVane.js"></script>
<script type="text/javascript" src="/native/EventCreator.js"></script>
<script type="text/javascript" src="/ext/ext-all-dev.js"></script>
<script type="text/javascript" src="/api/api.js"></script>
<script type="text/javascript">
Ext.app.REMOTING_API.maxRetries = 0;
Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);
</script>
<!-- include spec files here... -->
<script type="text/javascript" src="Sample/spec/SpecHelper.js"></script>
<script type="text/javascript" src="Sample/spec/PlayerSpec.js"></script>
<script type="text/javascript" src="Tests/EventCreation.js"></script>
<!-- note this needs to be last as it fires up the tests-->
<script type="text/javascript" src="TestApp.js"></script>
我实际上还没有抽出时间来剥离样本测试!无论如何,我能想到的最简单的方法是使用另一个页面,该页面使用不同的TestApp(最后一个条目),该页面将jasmine配置为使用jasmine-reporter库中的nunitreporter,并让selenium运行该页面
显然我不想只是复制粘贴所有的东西,只修改最后一点。这将是一个我们要添加很多的列表,如果CI和本地测试基本上不能以相同的方式工作,这将是一个真正的痛苦。
基本上,我想做的是将它有效地分成两个文档/包含集,就像这样:文档A -共享设置
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jasmine Spec Runner v2.0.0</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css">
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
<script type="text/javascript">
//set this a bit higher to aid debugging
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
</script>
<!-- include source files here... -->
<script type="text/javascript" src="Sample/src/Player.js"></script>
<script type="text/javascript" src="Sample/src/Song.js"></script>
<script type="text/javascript" src="/native/WeatherVane.js"></script>
<script type="text/javascript" src="/native/EventCreator.js"></script>
<script type="text/javascript" src="/ext/ext-all-dev.js"></script>
<script type="text/javascript" src="/api/api.js"></script>
<script type="text/javascript">
Ext.app.REMOTING_API.maxRetries = 0;
Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);
</script>
<!-- include spec files here... -->
<script type="text/javascript" src="Sample/spec/SpecHelper.js"></script>
<script type="text/javascript" src="Sample/spec/PlayerSpec.js"></script>
<script type="text/javascript" src="Tests/EventCreation.js"></script>
文档B -当前浏览器输出方法:
SomeCommandToInclude(documentA);
<!-- note this needs to be last as it fires up the tests-->
<script type="text/javascript" src="TestApp.js"></script>
文档C - CI/xml输出方法
SomeCommandToInclude(documentA);
<!-- note this needs to be last as it fires up the tests-->
<script type="text/javascript" src="XmlOutputApp.js"></script>
我觉得自己想做一些非常类似的事情几次与这些html脚本列表。你是怎么做到的?这可能吗?我在找一些和文件有关的东西。写了一段时间,但似乎并没有做正确的事情。
如果不可能在彼此中包含这些脚本列表,我愿意使用其他方法来进行CI,尽管我非常倾向于使用selenium,因为我不想学习另一个库/技术并花费大量时间来让它工作。
我是这样做的。我没有弄清楚如何包含html文件,但我得到了一些工作。
基本方法
我在url中传递了一个参数,该参数表示我们是否处于CI模式。客户端测试库解析url以检查是否应该创建xml输出。因为这是由selenium在浏览器中运行的,所以它不能直接保存到文件中。相反,我将其写入字符串,然后从Selenium中查询该字符串,并从那里将其写入磁盘。
Jasmine-reporters
jasmine- reporter已经被分叉来处理我正在使用的jasmine-2.0 请注意2.0分支不是主分支。我对git不熟悉,在历史上被它隐藏了另一个分支。那里有一个兼容版本的茉莉记者。
我使用了NUnit报告器,为了方便与selenium一起使用,我做了大量的修改,用以下代码替换了写文件方法:
self.writeFile = function(text) {
self.output(text, totalSpecsFailed > 0);
};
我还把这个添加到构造函数中:
self.output = options.output;
如果我们在CI模式下,我的呼叫/配置代码会这样做:
var jasmineEnv = jasmine.getEnv();
jasmineEnv.addReporter(new jasmineReporters.NUnitXmlReporter(
{
output: function (xmlOutput, anyFailures) {
testConfig.xmlOutput = xmlOutput;
testConfig.anyFailures = anyFailures;
}
}));
硒
selenium代码看起来像这样(注意,这不是原始的selenium -它通过一个API,我已经包装了基本的东西,但你应该能够得到要点)
public void PokeTheTestPage()
{
try
{
NavigateTo(WebAppUrl + "Tests/Jasmine/SpecRunner.html?outputFile=true");
var error = Driver.GetStringWith("return weatherVane.testConfig.errorText;");
if (error != "")
ExitWithError(error);
var testOutput = LongWait.Until(d => d.GetStringWith("return weatherVane.testConfig.xmlOutput;"));
var failed = Driver.GetBoolWith("return weatherVane.testConfig.anyFailures;");
using (var file = File.OpenWrite(_outputFile))
using (var writer = new StreamWriter(file))
writer.Write(testOutput);
if (failed)
ExitWithError("tests failed");
}
catch (Exception e)
{
ExitWithError(e.ToString());
}
}
private void ExitWithError(string error)
{
Console.WriteLine("got Error:");
Console.WriteLine(error);
Driver.Close();
Environment.Exit(1);
}
}
- 迷你$provider注入茉莉花和角
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 茉莉花节点测试;t正在运行
- Travis CI构建持续失败
- Meteor集成测试,在velocity'她的镜子上有茉莉花
- 我可以把茉莉花规格报告器的输出写入文件吗
- 茉莉花 - 未调用方法
- 在测试间谍的上下文中,存根和mock之间有什么区别?(茉莉花)
- 使用茉莉花测试木偶视图和车把模板
- 使用茉莉花测试主干关系模型
- JQuery/骨干删除在茉莉花中不起作用
- 茉莉花和元素的位置
- 量角器 iOS 自动化:茉莉花规范超时.重置 Web 驱动程序控制流
- 茉莉花Maven插件包括我的脚本使用文件协议
- 使用媒体.js在CI上
- 运行茉莉花测试用例
- 茉莉花宝石/茉莉花:ci:如何安慰日志
- 如何在Travis CI中以无头模式运行茉莉花规范
- Html /javascript共享脚本列表..或者用茉莉花和硒做CI