日期:2014-05-20  浏览次数:20680 次

如何开发一套测试工具
请教,现在需要开发一套测试工具软件,用来测试公司针对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测试通过,否则没有通过.