SSL下的Capybara,Puma,Rails系统测试出现EOFError

时间:2019-04-28 20:59:27

标签: ruby-on-rails selenium-webdriver capybara puma

在SSL下运行Rails系统测试会表现出奇怪的行为,我不确定这是错误还是设计使然。

这个非常基础的Example Application进行了一项系统测试,该测试在索引页面上查找元素。

>>> @dataclass
... class XYPoint:
...     x: float
...     y: float
...     def __add__(self, other):
...         cls = self.__class__
...         return cls(self.x+other.x, self.y+other.y)
...
>>> XYPoint(2,3) + XYPoint(5,7)
XYPoint(x=7, y=10)
>>>

这时,您必须创建一个自签名证书,并指示您的操作系统信任它。

git clone https://github.com/frankjmattia/rails-ssl-system-tests.git blorgh
cd blorgh
./bin/setup

这将生成证书和打印说明,以在Mac OS X或Ubuntu上信任它。这将对./bin/generate-blorgh-cert blorgh.test https://blorgh.testhttps://127.0.0.1

有效

https://localhost进行系统测试

rake以启动服务器,然后导航至rails s

当运行测试通过时,但是在我发出请求之前,Puma抛出了一个错误。

https://localhost:3000

我认为这是从Capybara服务器检查responsive?来的,但是我不确定如何证明或解决它。

即使所有测试都在本地通过,它们也可以在SemaphoreCI之类的CI平台上运行时挂起。

如果这是一个错误,那是谁的错误?我倾向于Capybara,但是如果我没有全部事实或无法充分描述它,不想浪费任何人提交错误报告。

2 个答案:

答案 0 :(得分:0)

当Capybara在等待服务器启动并确定服务器是http还是https时,它尝试向服务器发出http请求时,OpenSSL将输出SSL“错误”。收到错误后,水豚会以https请求重试。除了输出一条消息外,这实际上不会影响任何错误,并且没有任何理由“错误”会使SemaphoreCI挂起。

如果Semaphore使用的是docker平台,并且您正在运行Chrome> = 73,则可能会发现您需要将命令行选项--no-sandbox--disable-features='VizDisplayCompositor'传递给Chrome,以使其正常运行

答案 1 :(得分:0)

  

不知道EOFError是什么,尽管它可能与您在请求页面时切换app_host有关(无法保证访问返回时无法完成页面加载)

不这样做可以为我解决问题。在我的情况下,无需将其他选项传递给chromedriver。