如何*在本地或Jenkins上自动化基于浏览器的单元测试

时间:2017-04-12 22:45:55

标签: unit-testing selenium jenkins automated-tests browser-testing

直到几个月来一直在寻找这个问题的答案,仍然不知道如何实际做到这一点 - 如何自动化在浏览器中运行的测试? Selenium测试在后端运行,当然可以自动化,我们现在正在这样做。最近,我的任务是自动化基于浏览器的单元测试,我的知识差距很大 -

我不知道如何实际做到这一点 -

例如 - 自动化测试运行器如何收集测试结果并退出在浏览器中运行的(单元)测试代码?任何人都可以解释这实际上是如何完成的以及实现这一目标的步骤吗?

Karma是实现这一目标的最佳工具吗?

3 个答案:

答案 0 :(得分:4)

您可以使用http://phantomjs.org/。 phantomjs是一个无头的webbrowser,你可以看到没有gui的fullstack webbrowser,可用作库。与业力一起,您可以执行单元测试,而无需依赖任何GUI实现 这是一个博客帖子,它解释了这种情景http://orizens.com/wp/topics/my-setup-for-testing-js-with-jasmine-karma-phantomjs-angularjs/

中的不同组件

意味着您可以在无头Linux服务器上执行您的业力单元测试。

澄清:

  • 对phantomjs的需求并非来自单元测试。对phantomjs的需求来自于你的js单元测试依赖于浏览器api。
  • 它是一个很好的设计原则来构造代码,与浏览器api的耦合不会混淆所有代码。尝试引入一个封装浏览器api依赖关系的瘦层。像这样你可以测试你的js而不需要phantomjs。
  • 使用phantomjs执行单元测试可以花时间。如果你有很多单元测试,最好将浏览器api的依赖性分解出去。因此,您可以在不需要phantomj的情况下执行更多测试,并且只需要使用phantomjs执行少数单元测试。

答案 1 :(得分:1)

你可以使用黄瓜。如果您有20个测试用例,则需要执行。

您可以创建包含所有方案的要素文件。 可以在不同的包中定义Runner类和Method,了解需要执行的操作。假设你有一个场景 1.打开浏览器。 2.输入谷歌链接。 3.使用凭据登录。

使用上述信息创建一个功能文件。

使用Cucumber跑步者课程。并创建包方法,如

@When("^Open Browser$")
    public void open_Browser() throws Throwable {
    WebDriver driver = new FirefoxDriver();
    driver.get("www.google.com");
}   

同样,您可以创建不同的方法来运行。要运行jar,可以使用命令行界面技术。

答案 2 :(得分:1)

精彩文章LINK 基本: 这适用于Python自动化,您需要具备一些以前的知识/经验。

pip install selenium
pip install nose

上面应该在cmd或shell中执行......

  

对于此测试,我们将在http://www.aweber.com打开AWeber网站    使用Firefox,并确保页面标题是“AWeber电子邮件营销服务和小型企业的软件解决方案”。

import unittest
from selenium import webdriver

class AweberTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()

    def test_title(self):
        self.driver.get('https://www.aweber.com')
        self.assertEqual(
            self.driver.title,
            'AWeber Email Marketing Services & Software Solutions for Small Business')

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

使用nose运行测试:

nose aweber.py

接下来的测试,点击元素:

self.driver.get('https://www.aweber.com')
order_tab = self.driver.find_element_by_css_selector('#ordertab>a')
order_tab.click()

我们有很多选择器可以使用find_element_by_(css / xpath / name / id) - Locating elements 在这种情况下,我们使用点击方法,但我们也可以 .send_keys("asdf") ,滚动,使用

执行java脚本
browser.execute_script("alert('I canNNNNN not do javascript')")

完整代码示例: LINK-Pastebin