【发布时间】:2016-03-25 11:38:50
【问题描述】:
对于那些需要在测试之前和(或)之后执行的操作,有没有办法绕过 UI?是否可以向同一个测试会话发送简单的 GET 或 POST 请求,而不是在测试中编写脚本?
例如,我想编写一个测试来检查是否可以删除记录。为此,首先我需要创建记录。通过 UI 似乎不是一个好的选择,因为它不是测试本身的一部分。
【问题讨论】:
标签: selenium optimization regression-testing
对于那些需要在测试之前和(或)之后执行的操作,有没有办法绕过 UI?是否可以向同一个测试会话发送简单的 GET 或 POST 请求,而不是在测试中编写脚本?
例如,我想编写一个测试来检查是否可以删除记录。为此,首先我需要创建记录。通过 UI 似乎不是一个好的选择,因为它不是测试本身的一部分。
【问题讨论】:
标签: selenium optimization regression-testing
这实际上取决于被测应用程序。您可能不想对数据库进行 SQL 调用来创建这些记录,除非您真的知道自己在做什么。即便如此,当记录发生变化时,它也会使您的测试自动化中断。
也许您正在测试的应用程序提供了一个 API,可让您创建目标记录。这将是理想的,允许您发出 API 请求,然后您在 UI 中所要做的就是导航到“用户”将其删除的位置。
【讨论】:
您几乎可以通过在页面中执行一些 Javascript 来完成所有操作。 下面是一个使用 Javascript 调用发送 HTTP 请求的示例:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.google.com")
driver.execute_script("""
var r = new XMLHttpRequest();
r.open('POST', '/search', 0);
r.setRequestHeader('Content-type','application/x-www-form-urlencoded');
r.send('q=bill+material&output=xml&client=test&site=operations&access=p');
return r.responseText;
""")
虽然以这种方式设置测试可能很诱人,但我不建议这样做,因为它会为 UI 创建新的依赖项,增加复杂性并因此增加测试的维护成本。
【讨论】: