我正在写一篇关于软件测试自动化的论文.我计划比较两种测试脚本的记录和编程方法,并讨论几种自动化框架,例如Abbot,Selenium,Yemmy,FEST等等.另外在我的论文中将简要介绍一下软件测试技术和也许是自动化测试与软件测试的比较.
编辑:我计划通过它的GUI测试应用程序的方面.所以我的测试主要是在测试世界的Blackbox一侧.我没打算写关于单元测试的文章.
在片刻,我几乎阅读了不同的自动化框架,但我可能没有时间审查所有这些.因此,我打算阅读它们,并使论文更多地以文学为基础.
我正在为FPGA项目设置自动回归测试,几乎完全如下所述:
现在我想REPORT在Jenkins测试报告中看到测试结果(来自ModelSim仿真中的VHDL 语句).我的理解是Jenkins本身只支持jUnit格式,我寻找支持非XML格式但没有看到任何格式的插件.
从VHDL REPORT语句生成有效的XML将非常困难,因为模拟可能会根据严重性立即终止.这意味着每个单个测试的每个可能的退出路径都必须复制结束标记 - 而不是最易维护的方法.
那么,您是否知道将纯文本转换为jUnit(或其他格式,如果Jenkins支持)的任何简单方法?如果某些东西还不存在,那么编写一个Jenkins插件与仅仅抛出一个perl脚本是否有优势?还有其他建议吗?
我有一个程序,我们将它命名为a.out,它从文件中读取输入并将一些输出写入stdout.例如,文件包含第2,2行,我的程序"./a.out文件"在屏幕上写入4.
现在为了确保a.out在补丁之后运行良好,我正在为Linux寻找一个好的回归套件.我希望包含2,2个程序的每个文件返回4,我希望这是一个测试用例.
关于回归包的任何想法?
我是我的 IT 商店(一家中型零售商)中唯一编写单元测试的开发人员。管理层责成我向我们的开发人员介绍这样做的好处。
“啊哈!”之一。导致我对单元测试上瘾的时刻是我意识到单元测试套件可以防止代码回归,而如果您手动测试,您永远不会想到重新测试这些代码(因为它似乎与您所做的更改无关)。
我正在寻找此类测试的示例以包含在演示文稿中。理想情况下,它应该足够“真实”以具有可信度,但又足够独立以适合课堂环境。自制测试和指向相关文本的指针都很好。实施语言并不重要。
我有一个小的命令行应用程序(约6k行).它没有单元测试,因为我不知道怎么写它们; 但我现在追溯性地添加一些.我读了这个教程但是我对如何使用这个模块测试整个应用程序感到困惑; 事实上,我甚至不确定我想要做什么被称为"单元测试".
具体来说,如果我使用某些参数运行我的应用程序,它应该生成某些输出文件.我想确保那些输出文件不变.
即,我的应用程序的以下命令行调用:
main.py config1.txt 100 15
main.py config2.txt def 10 qa
etc.....
Run Code Online (Sandbox Code Playgroud)
创建一些小的输出文本文件(每个<10 MB)并将它们放入单个文件夹(每次调用一个),命名如下:
output/config1.100.15.201202011733/
output/config2.def.10.qa.201202011733/
etc...
Run Code Online (Sandbox Code Playgroud)
每个文件夹包含一些小文本文件(每个<10MB).每次迭代代码更改后,我都想用几十个命令行参数运行我的应用程序,并注意输出文件不同的任何情况.(理想情况下,我想做更多的事情;例如,对于某些输出文件,将它们作为带有特定主键的制表符分隔表进行比较,这样如果行顺序改变,它们仍将评估为相等;但这不是危急).
设置它的好方法是什么?
有一些应用程序域(例如GameDev),其中应使用随机值创建许多函数以生成其输出.其中一个例子如下:
def generate_key(monster_key_drop_coef):
key_letters = string.ascii_uppercase
rand = random.random()
if monster_key_drop_coef < rand:
return None
button = {}
button["type"] = random.choice([1,2,3])
button["letter"] = random.choice(key_letters)
return button
Run Code Online (Sandbox Code Playgroud)
此函数基于多个随机操作生成项目的丢弃.如果要自动验证此功能的正确性,则会出现此问题.生成的值不是确定性的,并且回归测试的编写似乎是不可能的.
我的问题是:
我们当前在工作中采用的系统是编写一些极其复杂的查询,这些查询执行多个计算并具有多个连接/子查询。我认为我没有足够的经验来判断这是否正确,所以我同意并尝试使用这个系统,因为它有明显的好处。
我们目前遇到的问题是编写查询的人犯了很多错误并假设一切都是正确的。我们现在已经指派了一名测试人员来分析所有查询,但这仍然证明非常耗时且压力很大。
我想知道我们如何创建一个自动化程序(如果可能的话,无需专门用代码编写它,因为我可以弄清楚如何做到这一点)来验证一组 10 多个不同的输入,验证输出数据并说如果计算正确。
我知道我可以使用数据库中的特定数据编写一个脚本,并使用 c# 创建一个脚本(数据库是 SQL Server)并验证所有出来的值,但我想知道官方的“标准”是什么,因为我的经验是我在这方面有所欠缺,希望能够改进。
如果需要,我很乐意添加更多信息,如果需要,请添加评论。谢谢。
编辑:我正在使用 c#
使用 testcafe grep 模式将部分解决我们使用标签的问题,但它仍然会在规范报告上显示这些标签......!!!
有没有办法在测试/夹具名称中包含标签并使用 grep 模式,但跳过这些标签以显示在执行报告中?
import { Selector } from 'testcafe';
fixture `Getting Started`
.page `http://devexpress.github.io/testcafe/example`;
test('My first test --tags {smoke, regression}', async t => {
// Test code
});
test('My Second test --tags {smoke}', async t => {
// Test code
});
test('My first test --tags {regression}', async t => {
// Test code
});
testcafe chrome test.js -F "smoke"
Run Code Online (Sandbox Code Playgroud)
上面的代码片段将为我触发仅烟雾测试,但报告将显示测试名称以及这些标签
是否有其他处理标签的方法或不在测试执行报告中显示标签的解决方案?
testing smoke-testing regression-testing e2e-testing testcafe
我有一个 N+1 问题,我想编写某种自动回归测试,因为它非常影响性能。
我想过监视 EntityManager 并验证它的方法createQuery()只调用一次,但是 Hibernate 不使用它来初始化惰性关系,因此它不起作用。我也可以尝试关闭我的存储库和我的服务之间的 JPA 事务(或分离我的实体)并寻找异常,但这确实是一个丑陋的想法。
为了给我们一个框架,假设我们有一个非常简单的父子模型:
@Entity
public class Parent {
…
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private Collection<Child> children;
}
@Entity
public class Child {
…
@ManyToOne
private Parent parent;
}
Run Code Online (Sandbox Code Playgroud)
还有一个非常简单的服务:
public class MyService {
…
public void doSomething(Long parentId) {
Parent parent = …; /* retrieve Parent from the database */
doSomeOtherThing(parent.getChildren());
}
}
Run Code Online (Sandbox Code Playgroud)
从数据库中检索父级可以使用以下两个查询:
SELECT parent FROM Parent parent WHERE parent.id = :id;
SELECT parent FROM Parent parent …Run Code Online (Sandbox Code Playgroud) 在改用哈希路由器之前,我经常执行该cy.url命令,以确保整个应用程序中的链接导航到正确的 URL 地址。现在我们使用哈希路由cy.url不再产生字符串,而是产生函数。有什么想法可以解决这个问题或发生这种情况的原因吗?
我在 cypress 测试运行程序中遇到错误,例如:
断言错误:测试的对象必须是数组、对象或字符串,但未定义
所以我记录了 typeof 结果console.log(typeof(cy.url))并将函数打印到控制台。
cy.get(dataCyButtonAttribute)
.should('be.visible')
.click()
console.log(typeof(cy.url))
cy.url().then(url => {
const categoryId = url.split(`${linkType}/`)[1]
const category = url.split('admin/')[1]
expect(category).to.contain(linkType)
expect(categoryId).to.equal('new')
})
}
Run Code Online (Sandbox Code Playgroud) testing ×7
unit-testing ×3
e2e-testing ×2
python ×2
automation ×1
c# ×1
cypress ×1
gui-testing ×1
hibernate ×1
java ×1
javascript ×1
jenkins ×1
jpa ×1
linux ×1
modelsim ×1
open-source ×1
python-3.x ×1
random ×1
sql ×1
testcafe ×1