标签: functional-testing

如何自动化功能/集成测试和数据库回滚

与我之前的问题相反,我会尝试提出我的要求.

我试图找到一些符合以下条件的框架/方法/"东西":

  • 能够使用C#编写自动化测试,最好用Visual Studio编写.
  • 测试应该驱动Web浏览器并像用户那样与SUT交互.
  • 测试应该能够在DB中设置测试场景.
  • 测试应该能够断言用户交互在DB中具有预期的效果.
  • 测试完成后,它应该能够回滚它在DB中所做的所有更改.

我的第一次尝试是使用NUnit测试来驱动Selenium(以及之前的Watin),但我在使用TransactionScope回滚Selenium驱动的浏览器在数据库中所做的更改时遇到了一些问题(请查看上面的链接).

有没有人在"现实世界"中做过这样的事情?我通过谷歌找到了一些参考文献,但未能找到有关如何实现这一点的具体例子.如果我正在进行单元测试,那就不会有任何问题.在那种情况下,TransactionScope就足够了.

编辑: R.Harvey向我指出了这个问题,这几乎与我的情况相同.

不过这个问题仅仅是几乎相同的.我的应用程序是一系列服务的一部分,所有这些服务都访问同一组数据库表.所需的测试数据量不允许有效使用drop/create-scripts,因此是否有其他替代解决方案?

我们正在使用SQL Server 2005,而且我对数据库魔术并不十分精通,所以如果有一些方法可以使用除drop/create之外的sql脚本,那么这可能是一个选项.

编辑2:

基于答案和一些额外的头脑,我们将为开发人员提供更轻量级的数据库,以执行单元,集成和功能测试.这使我们能够使用sql脚本来设置和拆除测试.

database asp.net integration-testing automated-tests functional-testing

7
推荐指数
2
解决办法
4428
查看次数

如何在rails中测试嵌套属性?

我有一个rails控制器,在这里定义:

https://github.com/abonec/Simple-Store/blob/master/app/controllers/carts_controller.rb

购物车页面上,用户可以通过发布嵌套属性来指定line_items的数量.参数如下所示:

{ "cart" => {
  "line_items_attributes" => {
    "0" => {
      "quantity" => "2",
      "id" => "36" } } },
  "commit" => "Update Cart",
  "authenticity_token" => "UdtQ+lchSKaHHkN2E1bEX00KcdGIekGjzGKgKfH05So=",
  "utf8"=>"\342\234\223" }
Run Code Online (Sandbox Code Playgroud)

在我的控制器动作中,这些参数保存如下:

@cart.update_attributes(params[:cart])
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在测试中测试这种行为.@cart.attributes仅生成模型属性而不是嵌套属性.

我该如何测试这种行为?如何在我的功能测试中使用嵌套属性模拟post请求?

testing ruby-on-rails functional-testing

7
推荐指数
2
解决办法
4716
查看次数

如何测试Rails 3中控制器中是否使用了正确的布局

在Rails 2中我会这样做

  def assert_layout(layout_name)
    assert_equal layout_name, @response.layout
  end
Run Code Online (Sandbox Code Playgroud)

和:

 assert_layout 'layouts/layout_name'
Run Code Online (Sandbox Code Playgroud)

这在rails 3中不再起作用(未定义的方法`layout').我该如何更改自定义assert_layout方法?

testing ruby-on-rails functional-testing ruby-on-rails-3 rails-3-upgrade

7
推荐指数
1
解决办法
611
查看次数

在Geb中,显示和现在之间有什么区别?

我正在编写功能测试并处理淡入淡出的模态窗口.

显示和现在有什么区别?

例如,我有:

settingsModule.container.displayed and settingsModule.container.present
Run Code Online (Sandbox Code Playgroud)

其中settingsModule代表我的模态窗口.

在测试我的模态窗口(来自Twitter的bootstrap的模态)时,我通常这样做:

def "should do ... "() {
    setup:
    topMenu.openSettingsModal()     

    expect:
    settingsModule.timeZone.value() == "Asia/Hong_Kong"

    cleanup:
    settingsModule.closeSettingsModal()
}

def "should save the time zone"() {
        setup:
        topMenu.openSettingsModal()             
        settingsModule.timeZone = "Japan"

        when:               
        settingsModule.saveSettings()       

        then:
        settingsModule.alertSuccess.size() == 1
        settingsModule.alertSuccess.text() == "Settings updated"

        when:
        settingsModule.saveSettings()       

        then:
        settingsModule.alertSuccess.size() == 1

        cleanup:
        settingsModule.closeSettingsModal()
    }
Run Code Online (Sandbox Code Playgroud)

等等.在我的模块中,我有:

    void openSettingsModal() {                  
        username.click()
        settingsLink.click()            
    }

void closeSettingsModal() {
        form.cancel().click()       
    }
Run Code Online (Sandbox Code Playgroud)

我总是抱怨:"必须显示元素才能点击".

在我的openSettingsModal和closeSettingsModal中,我尝试了许多waitFor与时间间隔的组合并使用present或not ...无法弄明白.

任何指针都将受到高度赞赏.谢谢!

grails functional-testing spock geb

7
推荐指数
1
解决办法
1万
查看次数

Django Test框架,带有基于文件的电子邮件后端服务器

我在Django框架中制定了测试用例.

使用案例:我使用的API通过向用户发送电子邮件来注册用户,当他们点击电子邮件中提供的链接时,他们的帐户就会被激活.

在我的settings.py我正在使用

EMAIL_FILE_PATH  ='django.core.mail.backends.filebased.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

它指向本地目录.

从eclipse运行PyUnit测试用例时,所有工作文件.为每个发送的电子邮件生成文本文件

但是,当我使用时

python ./manage.py test <component_name>
Run Code Online (Sandbox Code Playgroud)

文件不会生成.

任何见解当我执行测试用例./manage.py和使用时有什么区别pyUnit

python django automated-tests unit-testing functional-testing

7
推荐指数
2
解决办法
3262
查看次数

重定向后对Flash消息的功能测试

我不确定如何通过功能测试检查flash消息.我的问题与redirect_to我的flash[:error]DOES 测试通过有关.这是我的create行为:

def create
  @user = User.new(params[:user])
  if @user.save
    redirect_to @user, flash: { success: "Welcome!" }
  else
    flash.now[:error] = "Signup failed:"
    render 'new'
  end
end
Run Code Online (Sandbox Code Playgroud)

我有一个通过测试flash[:error]1)检查flash[:error]是正确的值,2)检查页面的flash div,3)获取一个新页面并检查闪存消息是否已被清除.我尝试进行类似的测试,flash[:success]但是当它试图在页面上找到div时失败了.这是失败的测试:

  should "show flash[:success] message" do
    post :create, user: { name: "valid user",
                          password: "userpw",
                          password_confirmation: "userpw",
                          email: "a@b.com" }        
    assert_redirected_to user_path(assigns(:user)), "user isn't being redirected to their page after registration"
    assert_equal flash[:success], "Welcome!", "flash[:success] isn't being set properly"
    assert_select "div.alert-success", flash[:success] …
Run Code Online (Sandbox Code Playgroud)

testing redirect ruby-on-rails functional-testing

7
推荐指数
1
解决办法
6411
查看次数

7
推荐指数
1
解决办法
2717
查看次数

使量角器测试占据整个屏幕

我在网上看到了几个与此问题相关的问题(如何在Protractor/WebdriverJS中设置默认的浏览器窗口大小),但它们没有解决我的问题.

我有测试,我希望能够在笔记本电脑屏幕或蚂蚁大小的桌面屏幕上成功运行.我曾尝试过以下所有这些方法,但不成功.

这个问题是我必须硬编码宽度和高度.我想自动检测屏幕尺寸

browser.driver.manage().window().setSize(width, height);
Run Code Online (Sandbox Code Playgroud)

这个问题是它似乎只是最大化高度而不是宽度.

browser.driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)

我希望能够获得屏幕的高度和宽度,并插入.setSize()函数.但是当我试着这个

browser.driver.manage().window().setSize(screen.width, screen.height);
Run Code Online (Sandbox Code Playgroud)

我明白了 ReferenceError: screen is not defined

如果我尝试,console.log($(window));那么窗口也没有定义

那么最好的方法是什么?

window functional-testing angularjs protractor

7
推荐指数
2
解决办法
1万
查看次数

Android Espresso:如何检查Toast消息是否未显示?

我现在正在进行功能测试,其中一个我必须测试没有显示吐司信息.考虑到这是我用来检查是否显示toast消息的代码(此代码有效):

onView(withText(R.string.my_toast_message))
        .inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
        .check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)

下面你可以找到我用来检查没有显示吐司信息的代码(它们都不起作用):

方法一:

onView(withText(R.string.error_invalid_login))
        .inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
        .check(matches(not(isDisplayed())));
Run Code Online (Sandbox Code Playgroud)

方法二:

onView(withText(R.string.error_invalid_login))
        .inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
        .check(doesNotExist());
Run Code Online (Sandbox Code Playgroud)

任何关于如何检查未显示吐司信息的想法都会非常感激:)

testing android functional-testing android-espresso

7
推荐指数
3
解决办法
6301
查看次数

Symfony功能测试在重定向后断言

我目前正在尝试编写功能测试但是在登录并重定向到新页面后我遇到了问题.一切正常,直到最后一次断言.重定向工作正常,重定向后的内容页面没问题,但我在上次断言时收到错误:断言false为真.在这里我没有发现任何可以帮助我解决类似问题

这是代码:

class DefaultControllerTest extends WebTestCase
{
public function testIndex()
{
    $client = static::createClient(array(),
        array(
            'HTTP_HOST' => 'locahost'

        ));



    $crawler = $client->request('GET', '/login');
    echo $client->getRequest()->getUri();


    $form = $crawler->selectButton('Login')->form(array(
        '_username' => 'user',
        '_password' => 'pass',
    ),'POST');


    $client->submit($form);
    $this->assertTrue($client->getResponse()->isRedirect());
    $client->followRedirect();
    echo $client->getRequest()->getUri();

    print_r( $client->getResponse()->getContent());


    $this->assertTrue($crawler->filter('html:contains("New")')->count() > 0);
}
Run Code Online (Sandbox Code Playgroud)

}

redirect functional-testing assertions symfony

7
推荐指数
1
解决办法
3343
查看次数