我们使用Capybara和Chrome Headless进行集成测试。我想编写一个linter,每次chrome浏览到另一个页面时,它都会检查HTML结构上的一些指标。然后,当某事不利于我们的短毛绒时,我会提出一个错误。
我们有一些没有javascript的测试,到目前为止,猴子补丁机架测试仍然有效:
ALTER TABLE score_mm ADD UNIQUE (quize_no, phone);
但是我在Capybara和/或Chrome Headless中还没有找到可以拦截响应并检查页面正文的方法。
页面更改时是否可以触发挂钩?还是Chrome提供了某种API,我可以从中获取每个请求的内容?还是代理是可行的解决方案?
答案 0 :(得分:1)
这不可能直接用Capybara实现,因为它实际上不知道浏览器中发生的页面转换/请求,除非用户特别用visit
启动它们。
使用puffing-billy之类的可编程代理来处理对被测应用的所有请求,这是一种可能的方式。如果您使用puffing-billy
,则需要查看pass_request
功能-https://github.com/oesmith/puffing-billy#in-your-tests-capybarawatir-对初始请求进行转发,然后对响应执行任何操作。
答案 1 :(得分:0)
我不会用HTML棉绒缠结水豚测试。目前看来,这似乎很明智,因为每次测试都可以免费获取URL列表,但是:
您可能拥有类似于sitemap.xml的信息或所有可用URL的其他来源。我将用它来进行单独的检查,这很简单:请求URL,使响应更短。冲洗并重复。
如果仍然不确定,请尝试使用page.html
并做类似的事情
expect(page.html).to pass_linter
https://github.com/teamcapybara/capybara#debugging
然后,您可以根据需要将其添加为每个around
规范的type: :feature
钩子。
编辑:这是让每个访问路径的另一种解决方法。只需解析服务器日志文件(例如cat log/devlopment.log | grep path
)即可获得访问路径的完整列表:
method=POST path=/users/login format=html controller=SessionsController action=create
status=302 duration=256.82 view=0.00 db=52.29 location=http://0.0.0.0:3000/platform/admin/dashboard params={"utf8"=>"✓", "authenticity_token"=>"ubGnWKOq8gbUE5C/aK375QQn5DpjHarUYxHtBLglGe6Lr9Ie3O5XPq90k5gr/SZbIPoDiiasvY0mGlwhzD/MsQ==", "user"=>{"email"=>"alex-3d51048235c9d1a8@toptal.io", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} uid=983 remote_ip=127.0.0.1 x_forwarded_for= x_request_id=
method=GET path=/admin/dashboard format=html controller=XXX action=show status=200 duration=3285.54 view=1051.32 db=2016.87 params={} uid=983 remote_ip=127.0.0.1 x_forwarded_for= x_request_id=
并将其用于棉绒。