Django应用程序的Selenium测试框架
项目描述
sboselenium是一个框架,主要用于帮助编写Django应用程序的Selenium测试,尽管它也可能在测试其他类型的Web应用程序时有用。
安装
将“sboselenium”添加到要测试的应用程序的依赖项中,并将“sbo_selenium”添加到INSTALLED_APPS设置中。像通常那样为包含项目安装新的依赖项;对于SBO软件包,通常是
pip install -r requirements/tests.txt
确保合并后运行以安装所有先决条件
./git-hooks/post-merge
浏览器引擎
如果您正在使用docker运行测试,则无需担心这部分。
如果您不使用docker,要使用特定的浏览器运行测试,则需要存在浏览器驱动程序。要使用Selenium驱动Chrome,您需要安装Chrome本身和chromedriver
1. 从http://chromedriver.storage.googleapis.com/index.html下载正确的ChromeDriver 2. 将二进制文件,chromedriver,放置在您的路径上的某个位置(例如:/usr/local/bin/chromedriver)
在Mac OS X上,如果您已安装Homebrew,则可以运行brew install chromedriver。
要在iPhone模拟器中测试Mobile Safari,您首先需要执行以下操作
安装Xcode
从Xcode首选项对话框的“下载”标签页中安装“命令行工具”和iOS模拟器组件之一(可能是最新的一个)
下载并运行 Appium
勾选“使用移动Safari”复选框
如果您想测试iPad形态,请勾选“强制设备”复选框,并确保在旁边选择“iPad”
点击“启动”按钮
要测试Opera或Safari,您需要下载Selenium独立服务器 jar文件,并在下述SELENIUM_JAR_PATH设置中配置其路径。
请注意,所有这些浏览器以及更多都可以使用Sauce OnDemand进行测试;下面将提供详细信息。
设置
sbo-selenium使用一些Django设置来配置测试运行的某些方面
DJANGO_LIVE_TEST_SERVER_ADDRESS - 测试服务器运行的地址(这将用作Django测试文档中描述的同名环境变量)。默认值为'localhost:9090'。
SELENIUM_DEFAULT_BROWSER - 在未指定浏览器时用于测试的网页浏览器。默认值为'chrome'。
SELENIUM_DEFAULT_TESTS - 在未指定测试时默认运行的Selenium测试。应为测试规范数组(请参阅下方的运行测试以获取示例)。默认值为空列表。
SELENIUM_DOCKER_DEBUG - 如果应使用selenium Docker容器的调试版本(以便允许VNC连接),则为True。仅在使用--docker参数时相关。默认值为False。
SELENIUM_DOCKER_PORT - 在本地主机(或Mac和Windows上的Docker Machine)上暴露运行在Docker容器中的Selenium服务器的端口号。仅在使用--docker参数时相关。默认值为4444。
SELENIUM_DOCKER_TAG - 用于标识要启动的Selenium Docker容器版本的标签。仅在使用--docker参数时相关。默认值为2.53.0。
SELENIUM_PAGE_LOAD_TIMEOUT - 在将GET请求的响应视为失败之前等待的秒数。默认值为10秒。(这在使用Sauce Connect时尤其重要,因为它有时无法正确连接,从而导致每个页面加载无限期地停滞。)
SELENIUM_JAR_PATH - Selenium独立服务器jar文件的绝对路径。
SELENIUM_POLL_FREQUENCY - 在失败操作后等待的秒数,然后再尝试。默认值为0.5秒。
SELENIUM_SAUCE_API_KEY - 用于运行测试的Sauce Labs账户的API密钥。
SELENIUM_SAUCE_CONNECT_PATH - Sauce Connect二进制文件的绝对路径,用于测试通过Sauce Labs无法公开访问的网站。如果没有设置,但其他参数指示使用Sauce,则假定要测试的网站是公开可访问的。
SELENIUM_SAUCE_USERNAME - 用于运行测试的Sauce Labs账户的用户名。
SELENIUM_SAUCE_VERSION - 在提供的虚拟机中请求Sauce Labs使用的Selenium版本。如果省略,则使用Sauce Labs提供的当前默认版本。有关可用版本和当前默认版本的文档,请参阅此处。
SELENIUM_SCREENSHOT_DIR - 保存测试运行过程中捕获的截图的目录的绝对路径(这些截图对于调试测试失败可能很有用)。如果目录不存在,则创建目录。如果通过Sauce Labs运行测试,则不会在此目录中创建截图,因为该服务为我们生成截图。
SELENIUM_TEST_COMMAND_OPTIONS - 要传递给test管理命令的附加关键字参数的字典
SELENIUM_TIMEOUT - 在放弃并声明操作失败之前等待操作首次失败后的秒数。默认值为10秒。
请注意,一些测试运行器(如nose)可能不会始终显示测试设置和拆解期间记录的错误。为了始终获得此输出,您可能需要配置一个输出到文件(以及可能输出到控制台的所有其他输出)的日志处理程序。
创建测试
我们正在创建Selenium测试作为Python类。通常,您会希望创建一个sbo_selenium.SeleniumTestCase的公共子类,您的实际测试类将继承该子类。此主类将包含登录和注销、验证常用页面内容是否存在、加载典型测试数据等常见操作的方法。这可以在应用 tests.selenium.__init__ 模块中定义。避免使用“test”作为方法名,因为测试运行器可能会将其误认为是实际独立测试。
然后,每个相关的测试集应该作为此公共测试案例类的子类中的方法创建,该类位于 tests.selenium(或其子目录)中。这些测试方法应该以test_开头,以便测试运行器可以找到它们。通常,每个测试类将覆盖单个页面或一组密切相关页面的功能。
运行测试
本地运行测试
可以通过“selenium”管理命令运行测试
./manage.py selenium --settings=myapp.selenium_settings
运行默认的sbo-selenium测试集
./manage.py selenium
或指定要运行的测试,而不是使用设置文件中指定的默认值
./manage.py selenium myapp.tests.selenium.test_module:TestClass.test_method myotherapp/tests/selenium --settings=myapp.selenium_settings
为Selenium测试保留单独的设置文件不是必需的,但在实践中,您可能希望使用与开发不同的设置(例如,确保DEBUG=False)。如果您不想每次都输入设置参数,简单的shell脚本应该可以解决问题。
#!/bin/sh ./manage.py selenium $@ --settings=myapp.selenium_settings
测试运行器使用的所有常规方法都应正常工作
directory/of/tests python.module python.module:TestClass python.module:TestClass.test_method
(请注意,当实际测试定义在该包的模块中时,指定一个包,如myapp.tests.selenium,并不会工作。)
默认情况下,测试在由SELENIUM_DEFAULT_BROWSER指定的浏览器中运行。您可以使用-b或--browser参数来更改此设置
./manage.py selenium -b firefox ./manage.py selenium --browser=safari
有效的浏览器名称是“chrome”,“firefox”,“htmlunit”,“ios”,“opera”,“phantomjs”和“safari”(“ipad”,“iphone”和“ipod”被视为“ios”的同义词,形式因子在Appium中选择)。
如果您想指定一个特定的Selenium服务器作为命令执行器(无论是运行在本机、特定远程服务器、Docker容器等),可以使用--command-executor参数。
./manage.py selenium -b firefox --command-executor=http://127.0.0.1:4444/wd/hub
注意,如果您在Docker容器、远程主机等中使用命令执行器,您不应该依赖localhost或127.0.0.1作为DJANGO_LIVE_TEST_SERVER_ADDRESS,并且必须将用于访问服务器的IP地址添加到ALLOWED_HOSTS。您可以是指定真实的IP地址(很少理想)或尝试通过以下代码推断它:
import socket IP_ADDRESS = socket.gethostbyname(socket.gethostname()) ALLOWED_HOSTS = ['localhost', IP_ADDRESS] DJANGO_LIVE_TEST_SERVER_ADDRESS = '{}:9090'.format(IP_ADDRESS)
您还可以指定运行测试的次数(例如,如果您有一个由于某些原因偶尔失败的测试,并且想要运行几次以提高遇到错误的机会)。
./manage.py selenium -n 5
在Docker容器中运行测试
作为方便,您可以使用--docker参数自动在Docker容器中启动一个独立的Selenium服务器,用于chrome或firefox测试。为此,终端必须已经配置为可以使用docker命令。测试运行结束后,容器将自动停止。默认情况下,它使用来自https://hub.docker.com/r/selenium/的2.53.0镜像,并暴露在4444端口,但可以通过上述Django设置进行自定义。
./manage.py selenium --settings=myapp.selenium_settings --docker ./manage.py selenium --docker
注意,如果您通过docker-machine或类似方式在虚拟机上运行Docker容器,并使用tox,您需要允许某些环境变量通过将以下内容添加到tox.ini中适当的环境来传递到tox环境中:
passenv = DOCKER_* HOME
在Sauce Labs上运行测试
不是在本地浏览器中运行测试,而是在Sauce Labs托管的虚拟机中的浏览器上运行测试。sbo-selenium中对这种支持的设计旨在与Jenkins Sauce OnDemand插件良好配合。要在Jenkins中运行测试,只需安装该插件并配置它以用于您要运行的作业。在本地计算机上,您需要设置上述SELENIUM_SAUCE_* Django设置,并使用一些命令行参数,包括之前提到的-b浏览器名称设置。
--platform - 要使用的操作系统名称和版本。
--browser-version - 要使用的浏览器版本号。
这些的有效值可以在Sauce Labs网站上找到。
还有一个--tunnel-identifier参数,可以用来利用一个命名的Sauce Connect隧道;如果您打算同时针对同一账户运行多个Connect实例(如多个Jenkins从节点),这将特别有用。有关这些隧道是什么以及何时使用它们的更多信息,请参阅Sauce Labs关于该主题的文档。
生成文档
此包的文档使用Sphinx及其来自sbo-sphinx的一些扩展生成。要生成本地文档并应用您可能已进行的任何更改,
pip install -r requirements/tests.txt tox -e docs
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
sbo-selenium-0.7.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 125ce651eb5f9ad159f8929df879b9b8abd5af36a6be68354d0251ab29d54be8 |
|
MD5 | 9773f82c394d063ac82868c0f118c3d6 |
|
BLAKE2b-256 | af1af8cc2a2ae024de5a4b8bb0f4961a314b4db991a5f24888777c17fe1b389c |
sbo_selenium-0.7.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 784f52d8b65f896694d20c33635e221f0c3aca1bef519ac669bb526b1a9c9b15 |
|
MD5 | c890326f0a7a388b2e6b2a130162301f |
|
BLAKE2b-256 | ac50db2f0d48701e602bf98dc5a437a8c84d0d2ac3d3e16b275d5982b556c484 |