Tag: 压力testing

Express.js中间件集成testing

我正在为express.js 2.5.8写一些中间件。 目的是使用基于会话的附加属性来修改请求对象。 我有unit testing了中间件function。 现在,我想进行一些较低级别的集成testing,以确认中间件正在被快速服务器使用。 我的典型做法是监视中间件function。 但是,这并不是certificate中间件按照预期工作的最有效的方式。 我想做什么(如果可能/可行的话)是加载应用程序,注入任意会话数据(它不需要是有效的),请求/访问发送中间件结果的testingpath。 从那里,我可以对这个结果作出断言。 我一直在使用supertest(superagent),僵尸,并要求testing,每个都有不同程度的成功。 我现在正在努力的是将会话数据注入请求,无论采用哪种forms。 我将不胜感激一些指导。 人们在testing这种types的行为时使用了什么方法?

用于testingExpress应用程序的状态交互

我用express写了一个简单的JSON API,我试图用mocha做一些黑盒testing。 通过对API进行testing,需要对不同的用户进行身份validation,因此每个针对特定function的testing都至less由两个请求组成:一个login操作和一个或多个validation请求,用于testing实际function。 我还没有find类似于django.test.client库来模拟HTTP客户端和服务器之间的有状态交互。 Supertest似乎很受欢迎,但与djangotesting客户端相比,它是非常低级的。 这是我将如何写一个简单的authenticationtesting(请原谅我的咖啡标记): it 'should return a 200 OK', (done) -> supertest(server.app) .post('/login') .send("username=xxx&password=pass") .end (err, res) -> res.should.have.status(200) supertest(server.app) .get('/api/users') .set('cookie', res.headers['set-cookie'][0]) .expect(200, done) 这真的是最干净的方式来执行交互? 有什么图书馆可以帮助我解决asynchronous问题(这不是我需要的东西,而是99%的情况下,testing的简单序列化,callback只是混淆)和有状态? 一些会这样的事情: it 'should rock', (done) -> myCoolLibrary [ -> @post '/login', {username: "xxx", password: "pass"}, (err, res) => res.should.have.status 200 @done() , -> @get '/api/users', […]

NodeJS代码自动化testing覆盖率

作为NodeJS REST API自定义testing框架的一部分,我想通过比较testing套件收到的所有可能结果,自动检测我的testing何时不再提供适当的覆盖。 有什么方法可以做到这一点? 我们可以假设它被用于REST API,其中包含需要覆盖分析的入口函数(API端点)列表,每个入口函数将以一个已知的“退出函数”结束,以标准方式响应请求者。 这是我到目前为止发现的: 1:基本解决scheme(目前正在实施) 在编写每个REST端点时,手动创build所有可能的结果“代码”的列表[成功,失败,失败,失败等等] 在testing运行之后,确保每个端点的testing套件都能看到列表中的每个代码。 优点:非常基本和易于使用; 不改变性能testing时间 缺点:非常容易出现大量人工检查错误; 如果有5种方法“FailDueToX”,并且只testing其中的一种,则不会标记任何问题。 非常基本的定义“覆盖” 2:静态分析 将代码parsing为某种分析树,然后查找“退出函数”的所有实例 遍历树直到到达API端点,并将该实例添加到端点作为预期的输出(需要保留堆栈跟踪logging以通过散列或类似方式到达那里) 运行testing时,端点将返回堆栈跟踪散列或类似内容,并将其与期望的输出列表进行比较。 优点:自动; 捕获可能导致相同输出代码的不同分支 缺点:生成分析树不是微不足道的; 不会检测永远不会运行的死代码; testing套件需要保持同步 3:分析 我已经在使用GreenHills代码覆盖工具的embedded式系统上完成了这项工作 启动类似dtrace的分析器,并分别logging每个testing的堆栈日志 parsing堆栈日志并将“testing”分配给每行代码 手动分析带注释的代码以查找差距。 优点:半自动; 向开发人员提供有关总覆盖范围的更多信息; 可以看到 缺点:减慢testing; 无法并行执行性能testing; 当可能的结果永远不会发生时,不标志。 还有什么,以及哪些工具可以帮助我进行静态分析和分析目标?

我怎么能一次testing/发送多个(假的)ajax请求到一个(node.js)服务器?

在某个时候,您的(node.js)应用程序可以很好地处理您的单个请求,而您希望看到如果有五十个人同时使用它,会发生什么情况。 内存使用会发生什么? 整个响应速度会怎样? 我认为这种testing做了很多,所以我想这可能是一个相对容易的帮助程序。 通过相对容易,我的意思是方便像POSTMAN – REST客户端是单个请求和响应testing。 你推荐的(或最喜欢的)testing方法是什么?

无法从超级应用程序请求中捕获exception

代码示例如下所示: https : //gist.github.com/sebinsua/8118001 (有三次失败,两次失败,我希望有四次失败,一次成功。) 如果从正常函数抛出,可以用摩卡来捕获AssertionErrors,但是一旦超级包装的应用程序调用函数,我就不能检测到它们。 这是烦人的,因为我想能够注入某些断言到我的快速应用程序,然后我可以testing。 (我正在testing一个有我想testing的副作用的中间件,如果你能告诉我如何模拟请求和响应对象,也可以解决我的问题。) 因为我能够进入间谍,我知道这与国家无法进入无关。 不过,我注意到node.js / express.js / supertest自动将未捕获的exception转换为响应中的错误消息。 也许这就是阻止他们被摩卡testing抓住的原因? 编辑 我刚刚testing了下面的代码,看看这是否是一个普通的http.createServer()问题。 事实并非如此。 这意味着连接,express.js,超级或超级等级都会发生。 (这些代码片段只能工作一半的时间btw …) var http = require("http"), assert = require('assert'); describe('Really crazy test of assertions', function () { it("cannot create a server which throws an assertion error", function (done) { var port = Math.floor(Math.random() * 9999) + […]

在Restify中使用testing数据库

我创build了一个简单的Restify服务器,并使用自己的JSONclient通过Mocha开始testing它的function。 当unit testingfunction时,可以设置指示testing设置的ENV var,并连接到相应的mongodb数据库。 但是,当使用JSONClient时,显然,testing已经连接的“运行”API服务器。 是否有任何方法通过开关数据库连接,通过客户端的端到端testingAPIfunction,以不覆盖开发数据库? 编辑:我想我可以添加一个方法沿着“switchDataConnection”的行,将切换到testing数据库,但感觉肮脏和哈克。

摩卡bdd风格testing命名

我正在使用Mocha作为testing我的node.js项目的testing框架。 我想遵循BDD风格来组织我的testing/规格。 我曾经写过一些使用黄瓜的testing,它使用了BDD风格,就像给定when-then子句一样 。 但对于摩卡来说,它使用不同的语言来描述规格。 您可以使用嵌套的描述语句来描述规范。 我想知道命名Mochatesting的最佳做法是什么。 谢谢。

如何使用supertesttestingPOST请求参数Express应用程序?

我使用Express 4.0.0创build一个API,其中一个路由需要一个POST。 目前我只是试图让它响应在请求参数中发送的名称。 响应是一个JSON对象,但请求需要表单域。 users.post '/user', (req, res) -> res.json name: req.params.name 我的testing设置type() form应该允许send()传递散列作为POST参数/字段。 describe 'POST /user', -> it 'should echo the name sent', (done) -> request app .post '/user' .type 'form' .send name: 'Foo' .expect '{"name":"Foo"}' .end done 无论如何,我的testing失败了,在Express中,我的req.params是空的, req.param('name')是undefined , req.body也是空的。 有没有一些req.fields属性我不知道,或者是我的testing瑕疵?

如何链接casper与任何存储

我需要将testing结果存储在任何存储中。 但不幸的是,它不会与任何db驱动程序任何时候引发exception“CasperError:无法find模块networking”: var require = patchRequire(require); var redis = require("redis"), client = redis.createClient(); 是否有可能将casperjs连接到任何存储(当然除了纯文件)。

testing使用browserify别名和垫片的CommonJS模块

Browserify允许创build不直接与CommonJS兼容的别名和填充模块。 因为我想在节点CLI中运行我的testing,我可以以某种方式处理这些别名和节点中的模块? 例如,假设我将别名./my-super-module为supermodule和shimming,并将jquery插件的一些别名./vendor/jquery.plugin.js – > ./shims/jquery.plugin.shim.js为jquery.plugin 。 因此,我可以在我的模块中做到这一点: var supermodule = require('supermodule'); require('jquery.plugin'); // do something useful… module.exports = function(input) { supermodule.process(output) } 有没有什么做法,我可以在node.js / cli中testing这个模块,以便解决依赖关系?