如何开发一套测试工具
请教,现在需要开发一套测试工具软件,用来测试公司针对Winform类产品。但是现在无任何头绪。
请高手指点一下。
谢谢。
------最佳解决方案--------------------呵呵,不就是“头绪”嘛,那就抛砖引玉一下吧。随便写一段代码看看:
private static Random Rnd = new Random();
private static void BeginTest()
{
var testcases = (from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
where type.IsClass && typeof(Form).IsAssignableFrom(type) && typeof(ITestForm).IsAssignableFrom(type)
select type).ToList();
if (testcases.Count > 0)
BeginInstance(testcases, 0);
}
private static void BeginInstance(List<Type> testcases, int n)
{
var pos = Rnd.Next(testcases.Count); //随机选择一个测试用例
var testcase = testcases[pos];
var testinstance = (Form)Activator.CreateInstance(testcase); //创建一个测试Form的实例
((ITestForm)testinstance).TestCompleted += () =>
{
if (n <= testcases.Count * 10) //一共进行 testcases.count*10 次测试可以保证每一个测试用例都至少实例一次。
BeginInstance(testcases, n + 1);
};
testinstance.Show();
}
------其他解决方案--------------------NUnit做单元测试挺方便的
真正的全面自动化集成测试都是自己写测试程序,可以将发现的bug自动导入测试管理系统
随机产生测试数据,随机抽取测试用例来反复测试
http://blog.csdn.net/wyingquan/category/231722.aspx
------其他解决方案--------------------public interface ITestForm
{
void StartTest();
event Action TestCompleted;
}
其实测试程序跟随便写一个程序也没有什么区别。没有必要统计有多少测试是“红灯”,有多少是“绿灯”。因为第一个红灯,那么所执行的那个测试程序就应该抛出异常:throw new Excepsion(...)。只要有一个bug,我们就没有必要再去测试别的东西,应该集中精力解决这一个bug。其实这种遇到了bug就立刻停止所有其它工作的做法,才真正敏捷。
进一步,我们可以增加一个StartTestAttribute,可以为测试程序定义何时开始测试。甚至一个ReopenAttributes,这样我们可以声明某个测试推迟测试(例如2011/1/13 13:00之后才开始测试)。
这样,当你的测试用例很多时,大多数时候可以让上面的uery仅仅查找最近3天的测试。对于(每)个人来说,每隔10分钟就应该运行一次测试。然后用测试的bug来驱动你去写下面几分钟的代码。不要做不必要的事情,也就是说不要在没有测试用例的情况下盲目写代码。
每天也至少应该进行几次包括所有测试用例的测试。
------其他解决方案--------------------这样我们可以声明某个测试推迟测试 --> 这样我们可以声明某个以前已经貌似可以淡忘了的测试推迟测试
其实测试程序跟随便写一个程序也没有什么区别。比如你在一个测试Form里从数据库里查询并随机生成了一个数据,并加载了一个被测试控件到这个Form,然后所谓StartTest方法就是为控件(可能需要反射)填入值,(可能需要反射)触发按下按钮的事件,然后(假设这时候被测试控件需要联系世界上另一头的服务器)过了几秒钟判断一下控件的下一步行为(比如可能需要反射来取得控件,判断它的值)是否正确,如果不正确就抛出异常就行了。
一旦测试程序执行完,触发TestCompleted,那么(上面的demo程序)引擎程序就知道可以产生下一个测试用例的实例了。
------其他解决方案--------------------测试的目的是期望的结果与实际结果是否一样。如一个方法在特定的条件下返回0,在测试时创造返回0的条件,可实际结果是否为0.如果为0测试通过,否则没有通过.