如何在teamcity中运行e2e测试,如何在后台运行服务器并运行e2e

2024-04-07

如何在 teamcity 构建步骤中运行我需要的服务器以及 e2e 测试?

我对我的 Angular 2 应用程序进行了 Protractor e2e 测试。 (我有一个有趣的 Angular-cli 和 gulp 组合,但请耐心等待。)

这是我在本地运行测试的方法。我需要三个控制台窗口(w1,w2,w3)。

w1)我需要做的第一件事是启动我的应用程序:

npm start-> 我在 package.json 中定义为ng serve -prod

w2) 然后启动假后端,一个快速网络服务器

npm run gulp e2e-server-> 我已经定义了"gulp": "gulp"在我的包配置中,因为gulpTeamcity 不会被识别。

3w) 最后我可以运行我的 e2e 测试

npm run e2e -- e2e/protractor-teamcity.conf.js我已经定义了"pree2e": "webdriver-manager update" and "e2e": "protractor"在我的包配置中

Then...

我需要手动停止我启动的两台服务器。

像这样的 hack 会起作用:

npm run gulp e2e-clean && start "MyWindow" cmd /c "start npm start && npm run gulp e2e-server" && ping -n 31 127.0.0.1 >nul && npm run e2e -- e2e/protractor-teamcity.conf.js

But start创建永远不会停止的控制台窗口。我不确定这会产生什么后果(我怀疑这会成功运行两次)。 ping 是一个睡眠黑客,这也不理想。

有没有人找到了在测试运行期间“在后台”运行命令然后随后终止它的解决方案?


所以,这是一个可怕的黑客行为。那种暗示某些事情是严重错误的黑客行为,但乏味:

当 ng 服务运行时它将更改控制台窗口标题到“angular-cli”,当 gulp 运行它时,将其更改为“gulp”(或“select gulp”)。我预计这些游戏不会再运行任何其他游戏。这样就够写了__kill-running-windows去杀死这些窗户。

包.json:

  "scripts": {
    "start": "ng serve -prod",
    "test": "gulp test-teamcity",
    "pree2e": "webdriver-manager update",
    "e2e": "protractor",
    "gulp": "gulp",

    "e2e-teamcity": "gulp _e2e-clean && npm run _e2e-teamcity & npm run _kill-running-windows",
    "_e2e-teamcity": "npm run _e2e-servers && gulp __wait-60 && gulp _e2e-test-teamcity",
    "_e2e-servers": "start gulp _e2e-server && start gulp serve",
    "_kill-running-windows": "taskkill /fi \"Windowtitle eq gulp\" & taskkill /fi \"Windowtitle eq select gulp\" & taskkill /fi \"Windowtitle eq angular-cli\" & taskkill /fi \"Windowtitle eq select angular-cli\""
  },

代码(无论如何,有趣的部分,我将把 gulp 等留给读者想象):

var expressServer = require("gulp-express");
var process = require("child_process");
var shell = require("gulp-shell");

/**
 * Run vanilla e2e tests with teamcity reporter
 * 
 * (Remember to call `e2e-server`, `serve` and edit `config.json` to point at config.e2e.json` first)
 */
gulp.task("_e2e-test-teamcity", function(done) {
    return gulp.src("")
    .pipe(
        shell(["npm run e2e -- e2e/protractor-teamcity.conf.js"])
    )
});

gulp.task("__wait-60", function(done) {
     // HACK: Do 61 pings -> wait 30 seconds
     process.exec("ping 127.0.0.1 -n 61 > nul", function (err, stdout, stderr) {
         done();
     });
});


/**
 * Run mock backend for the e2e, with canned answers to all calls
 * !! Use config.e2e.json in your application in order to point at this !!
 */
gulp.task("_e2e-server", function () {
    expressServer.run(["./e2e/server.js"]);
    gulp.watch(["./e2e/server.js"], expressServer.notify);
});

由于某种原因,将更多代码移入 gulp 似乎会使 teamcity 上的构建永远无法完成。但这是我在本地使用的 e2e,它更基于 gulp:

/**
 * Run vanilla e2e tests
 * Cleans screenshots folder, tarts the application, starts the mock server
 * Leaves command windows running the servers open at the end of the test run
 * 
 * 30 second wait for tests to start
 * 
 * (Remember to edit `config.json` to point at config.e2e.json` first)
 */
gulp.task("e2e", ["_e2e-clean"], function (done) {
    gulp.src("")
    .pipe(
        shell(["start gulp _e2e-server"])
    ).pipe(
        shell(["start gulp serve"])
    );
    runSequence("__wait-30","_e2e-test", done);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在teamcity中运行e2e测试,如何在后台运行服务器并运行e2e 的相关文章

随机推荐

  • 在结构体中定义宏背后的逻辑是什么?

    正如标题所示 我质疑在结构体中定义宏的原因 我经常在网络编程中看到这种方法 例如以下代码片段 struct sniff tcp u short th sport source port u short th dport destinatio
  • WPF 启动屏幕直到 Windows 结束加载

    我有一个应用程序在窗口加载时消耗大量时间 在 Window load 事件中 我从数据库读取一些控件的状态和名称 我想做一个启动画面 该启动画面将在窗口完全加载后结束 我尝试过这个例子http www codeproject com KB
  • PHP 5:const 与 static

    在 PHP 5 中 使用和使用有什么区别const and static 分别什么时候合适 以及起什么作用public protected and private玩 如果有的话 在类的上下文中 静态变量位于类范围 而不是对象 范围内 但与
  • 通过删除代码注释来优化网站?

    我想知道从 php js css html 和类似文件中删除代码注释是否有任何 明显的 性能改进 大多数情况下不是 现代 CPU 的速度非常快 最显着的改进是下载速度的速度 删除通过网络发送到浏览器的任何不必要的注释 缩小 CSS Java
  • Objective-C TRUE/FALSE 与 true/false

    在 Objective C 中 我们有不同的关键字来评估布尔值 我们有YES NO TRUE FALSE and c99 true false 我明白BOOL vs bool很好 这篇文章很好地解释了这些差异 http www bigner
  • 是否有用于读取血压数据的 Google Fit REST API?

    谷歌文档提到了专门写入血压数据 https developers google com fit scenarios write bp data https developers google com fit scenarios write
  • MSI 与 nuget 包:哪个更适合持续交付?

    我们来讨论一下下面的话题 目前有一个应用程序正在使用熟悉的 xcopy 方法进行部署 这种方法使得管理依赖项 文件更新等变得困难 有一个想法是在一些软件包的帮助下开始应用程序部署 就像在 Linux 中借助RPM http en wikip
  • 检查 Qunit 是否正确加载图像

    我正在尝试验证图像URLs with Qunit通过将 URL 设置为src测试图像的属性并检查error事件处理程序是否顺利 到目前为止我所拥有的是 test image function var test image test imag
  • rstudioapi AskForPassword 不屏蔽用户名输入

    有没有办法禁用 rstudioapi askForPassword 弹出窗口中的屏蔽 以便用户可以输入他们的用户名 我正在构建一个可以与我的团队共享的函数 用于使用 ROracle pacakge 连接到我们的 Oracle 数据库实例 目
  • 为什么在传递给参数时不能隐式构造一个给定合适构造函数的对象?

    在下面的示例中 为什么我不能简单地传递一个string to the printFoo include
  • PHP REST API 路由

    我一直在研究 API 并为我们正在进行的项目开发 REST API API 只接受来自一个 JSON 格式的源的连接 我理解这一点很好 如果理解了所说的大部分内容 但是我不明白第三个代码示例以及路由信息的去向 他们提供的例子是 data R
  • 暴露 angular.js 中的 JavaScript 错误

    在某些情况下 角度引擎不会输出原始数据javascript错误 例如 myapp directive helloWorld function return scope restrict AE template p Hello World m
  • Android 将图标变成另一个图标

    如何实现一个图标转变为另一个图标的动画 例如汉堡变成箭头 导航抽屉 或铅笔变成十字 收件箱 我怎样才能存档这个动画 图标动画可以使用以下方式实现animated vector http developer android com refer
  • Xcode 6 Storyboard Unwind Segue 与 Swift 未连接退出

    当尝试将导航栏按钮连接到 Xcode 6 中 ViewController 的退出项时 不太确定这是否是 Xcode 6 问题 但值得一提 因为它处于测试阶段 它在自定义类中找不到 Swift 函数 它应该找到的函数 IBAction fu
  • 处理过期的VOIP推送

    所以我有 VOIP 呼叫应用程序 一切正常 一个用户可以呼叫其他用户并且可以通话 但我面临的问题是我不明白如何解决这个问题 问题 当user1呼叫user2时 user1向user2发送voip推送请求 但是当收到推送通知时 user2 处
  • Firebase 托管未验证 GoDaddy 中的 TXT 记录

    我部署了我的应用程序 现在我正在尝试添加我的自定义 URL 我按照 Firebase 的说明将他们的 TXT 记录添加到我的 DNS GoDaddy 中 但现在 Firebase 表示尚未得到验证 我认为我做错了什么 但这里没有什么可搞乱的
  • QVBoxLayout:如何使用 Qt 设计器将小部件对齐到顶部

    我仅将 qt 设计器用于 ui 布局 这与这个问题几乎是同一个问题 QVBoxLayout 如何将小部件垂直对齐到顶部而不是中心 https stackoverflow com questions 10082299 qvboxlayout
  • Php:查找 Chrome 和 Safari 浏览器

    我使用下面的代码来查找用户代理 user agent SERVER HTTP USER AGENT if preg match MSIE i user agent echo Internet Explorer if preg match F
  • 安装分析后,我的 Worklight 6.2 控制台上没有运行时

    我刚刚安装了Worklight 6 2服务器 使用配置工具部署了一个简单的项目 并且运行正常 然后我按照知识中心的说明安装分析 之后 当我在浏览器中打开 WL 控制台时 我收到 找不到运行时 分析似乎运行良好 我的 war 文件位于 Lib
  • 如何在teamcity中运行e2e测试,如何在后台运行服务器并运行e2e

    如何在 teamcity 构建步骤中运行我需要的服务器以及 e2e 测试 我对我的 Angular 2 应用程序进行了 Protractor e2e 测试 我有一个有趣的 Angular cli 和 gulp 组合 但请耐心等待 这是我在本