我(相当小)的公司开发了一个流行的Windows应用程序,但我们一直在努力的一件事就是测试 - 它经常只是由开发人员在类似于他们开发的系统上进行测试,并且当推送更新时对于客户来说,由于Windows补丁的一些奇怪的功能,或者在某些偏执的防病毒应用程序(我看着你,Comodo和卡巴斯基!)的情况下,我们的基础部分会遇到问题,它们会假的 - 我们的应用程序的积极性.
我们对70%的用户使用进行了手动测试,但这种测试既缓慢又痛苦,有时并不像应有的那样完整.管理层坚持认为我们需要做得更好,但是在发布时他们会继续解决这个问题(测试会花费多长时间?只需推出它,我们就会向遇到问题的客户发布补丁!).
我想设计一个更好的使用虚拟机自动化测试系统,但可以使用一些关于如何实现它的想法,或者如果有一个COTS产品,任何建议都会很棒.我正在一起攻击一个"运行"我们产品的每个功能的Python脚本,但我不确定如果我们遇到Windows崩溃(除了检查它是否仍在进程列表中)之后如何进行测试,或者更糟糕的是,如果Comodo因为一些愚蠢的原因而举报它.
为了最好地模拟测试环境,我试图让VM尽可能"纯粹",并且不会在操作系统和防病毒软件以及一些常见应用程序(Acrobat Reader,Firefox等)之外加载大量垃圾.
任何想法将非常感谢!
我们在使用casper.js进行功能测试时遇到了一些问题.
我们两次请求相同的资源,首先使用GET,然后使用POST方法.现在,当等待第二个资源(POST)时,它与第一个资源匹配,并直接转到"then"函数.
我们希望能够在"test"函数中检查HTTP方法,这样我们就可以正确地识别资源.现在我们使用状态代码(res.status),但这并没有完全解决我们的问题,我们真的需要http方法.
// create new email
this.click(xPath('//div[@id="tab-content"]//a[@class="button create"]'));
// GET
this.waitForResource('/some/resource',
function then() {
this.test.assertExists(xPath('//form[@id="email_edit_form"]'), 'Email edit form is there');
this.fill('form#email_edit_form', {
'email_entity[email]': 'test.bruce@im.com',
'email_entity[isMain]': 1
}, true);
// POST
this.waitForResource(
function test(res) {
return res.url.search('/some/resource') !== -1 && res.status === 201;
},
function then() {
this.test.assert(true, 'Email creation worked.');
},
function timeout() {
this.test.fail('Email creation did not work.');
}
);
},
function timeout() {
this.test.fail('Email adress creation form has not been loaded');
});
Run Code Online (Sandbox Code Playgroud)
或者也许有更好的方法来测试这种情况?虽然这是一个功能测试,但我们需要在一次测试中保留所有这些步骤.
首先,当我说守护进程时,我的意思不一定是这样产生的应用程序,而只是打算以这种方式运行的应用程序;在这种情况下,是 HTTP 负载平衡组件。
问题的关键在于,当您对 Flask 应用程序之类的东西进行功能测试时,您可以初始化应用程序并在同一过程中对其进行测试。当您像我一样测试网络守护程序时,它需要在单独的进程中运行。所以,我的问题是,是否有任何既定的工具或方法可以做到这一点?我的直观方法是在测试设置期间生成进程,通过使用诸如 httplib2 之类的请求来运行测试,然后在拆卸期间终止它。不过,这感觉有点脆弱,我想知道是否有更优雅的方法。
在过去的几周里,我一直在使用Robotium为应用程序编写测试用例.这是一个很棒的工具,但有一件事我似乎无法工作.我正在使用的应用程序会创建一个弹出窗口,无论您是否在应用程序中或通知用户,并且在查看UI时,Automator Viewer仍然与我正在测试的同一个程序包绑定.
问题是我无法阅读任何文本或通过Robotium点击窗口中的任何内容.我创建了一个测试,看看Robotium是否能够手动查看它在调试模式下的所有视图,但它似乎是透明的.有没有人知道这个或另一个程序的方法是否适合这个?
我注意到一些Geb功能测试通过了Chrome但是没有使用PhantomJS,保持所有其他变量不变.出现这种情况主要是与具有某种异步活动页面-一个呼叫$(selector).click()触发的事件处理程序更新DOM和DOM更新,需要在调用之前完成$(anotherSelector).click().
我可以通过积极使用再次使PhantomJS测试通过,waitFor但我不明白为什么PhantomJS GhostDriver而不是Chrome驱动程序需要这样做.
不幸的是,我还没有能够构建一个与我的应用程序隔离的最小测试用例.
如果我正在测试的方法或过程依赖于来自第三方的一段代码,我该如何创建单元测试?说,我有一个方法,它使用来自第三方源的类,这些类需要只能在功能测试中完成的设置.我该怎么做呢?大多数情况下,第三方依赖不能被嘲笑,但我的方法确实需要使用它.
另外,我应该通过利用实际数据避免单元测试甚至功能测试吗?比如,我的测试是否永远不会连接到数据库API以临时添加数据,对其进行操作和测试,然后将其删除?
testing tdd unit-testing functional-testing functional-dependencies
这是检查录制是否正常的python代码:
def setUp(self):"Setup for the test"
desired_caps = {}
desired_caps['browserName']=''
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = 'd65d04425101de'
# Returns abs path relative to this file and not cwd
desired_caps['app'] = '/home/karthik/appiumworkspace/tests/app-debug (2).apk'
desired_caps['appPackage'] = 'com.prueba.maverick'
desired_caps['app-activity'] = '.SplashActivity'
desired_caps['app-wait-activity'] = '.MainActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
"Tear down the test"
self.driver.quit()
def test_whether_app_is_installed(self):
"Test if the app has been installed correctly"
self.driver.is_app_installed('com.prueba.maverick')
print('APP HAS BEEN INSTALLED')
def test_record_the_audio(self):
"Test it clicks on Record button correctly"
element = …Run Code Online (Sandbox Code Playgroud) 我按照Symfony关于功能测试的文档来编写我的第一个,但是我有一些问题.我通过浏览器得到的响应很好:
但是当我phpunit -c app/在shell中运行时,我会失败.
1)AppBundle\Tests\Controller\MeterAPIControllerTest :: testGetAllVariables声明500匹配预期200失败.
这是代码:
<?php
namespace AppBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MeterAPIControllerTest extends WebTestCase
{
public function testGetAllVariables()
{
$client = static::createClient();
$crawler = $client->request(
'GET',
'/meters/121/120/variables'
);
// Assert a specific 200 status code
$this->assertEquals(200, $client->getResponse()->getStatusCode());
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试另一个测试断言,我也会失败.
// Assert that the "Content-Type" header is "application/json"
$this->assertTrue(
$client->getResponse()->headers->contains(
'Content-Type',
'application/json'
)
);
Run Code Online (Sandbox Code Playgroud)
编辑
当我运行时phpunit,app/logs/test.log我得到一个PHP异常:
[2016-03-31 15:25:21] request.CRITICAL:未捕获的PHP Exception Doctrine\Common\Persistence\Mapping\MappingException:"类AppBundle\Entity的映射文件'AppBundle.Entity.EM2Meter.orm.yml'无效\ EM2Meter"." at /Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php第86行{"exception":"[object](Doctrine\Common\Persistence\Mapping\MappingException) (代码:0):类'AppBundle\Entity\EM2Meter'的映射文件'AppBundle.Entity.EM2Meter.orm.yml'无效.在/ Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:86)"} [] …
我正在使用 wheresrhys fetch-mock npm 模块在我的应用程序中运行功能测试。我想用“POST”方法和特定的有效负载来模拟一次提取。
它看起来像这样:
fetchMock.mock({
routes: {
name: 'LoginSuccess',
matcher: "https://myurl",
method: 'POST',
payload: {
params:{User: "ABCDE@gmail.com", Password: "password"}
},
response: {
result:{
message: "Successful login",
credentials: "XXXXXXXXXXXXX"
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
我想检查我的 fetch 的有效负载并相应地给出响应。例如,我可以模拟用户提交错误密码的一次登录,然后他们再次尝试并提交正确的信息并被授予访问权限。相同的 url,不同的负载,不同的响应。
是否有可能做到这一点?我知道可以检查获取的方法,但我想对有效载荷做同样的事情。
或者有没有更好的方法来做到这一点?
我还没有在模块的自述文件或fetch-mock 包的测试部分找到解决方案。
我对如何在 symfony 4 中为测试环境设置数据库感到困惑。我曾经在 symfony 3 及以下版本的config_test.yml文件中处理它。
最佳做法是什么?我应该在config/packages/test 中重新创建一个dotric.yaml文件吗?
该文档提到了如何通过编辑 phpunit 配置使用数据库运行功能测试:
<phpunit>
<php>
<!-- the value is the Doctrine connection string in DSN format -->
<env name="DATABASE_URL" value="mysql://USERNAME:PASSWORD@127.0.0.1/DB_NAME" />
</php>
<!-- ... -->
</phpunit>
Run Code Online (Sandbox Code Playgroud)
但是它不能满足我的需求,因为我需要能够将架构/加载装置更新到测试环境。
automation ×3
python ×3
android ×2
phpunit ×2
symfony ×2
testing ×2
unit-testing ×2
casperjs ×1
cots ×1
daemon ×1
fetch ×1
fetch-mock ×1
geb ×1
javascript ×1
phantomjs ×1
php ×1
robotium ×1
tdd ×1