自动化测试-使用使用数据库存储测试用例和测试结果
来源:互联网 发布:知豆高速没电了怎么办 编辑:程序博客网 时间:2024/06/01 10:15
前面两篇博客介绍了使用XML存储测试用例和测试结果,并介绍了两种处理方式流处理模式和缓存处理模式,个人更喜欢缓存处理模式,呵呵。下面将介绍使用数据库存储测试用例和测试结果,缓存处理模式的自动化测试套件的编写。
1、 准备被测应用程序。参见自动化测试-使用XML存储测试用例1中的那个
2、 准备测试套件项目,并创建TestCase和TestCaseResult类。参见自动化测试-使用XML存储测试用例1
3、 准备数据库和数据。
在sql server中执行下面的脚本:我用的是sql server 2008
use master
go
if exists(select*from sysdatabases wherename='dbTestMethod')
drop database dbTestMethod
go
create database dbTestMethod
go
use dbTestMethod
go
create table tblTestCases
(
caseid char(4)primary key,
input char(14)not null,
expected varchar(35)not null,
)
go
insert into tblTestCases
values('0001','2 4 8','22.4286')
insert into tblTestCases
values('0002','1 5','3.0000')
insert into tblTestCases
values('0003','1 2 4 8 16 32','10.5000')
go
create table tblTestResults
(
resultid int identity(1,1)primary key,
caseid char(4)not null,
input char(14)not null,
expected varchar(35)not null,
actual varchar(35)not null,
result char(4)not null,
runat datetime not null
)
Go
这样就创建了数据库dbTestMethod,库中有两个表tblTestCases(测试用例表)和tblTestResults(测试结果表),在tblTestCases表插入了几条测试用例。当然,你完全可以不执行脚本,使用菜单创建库和表,以及通过界面插入数据。
4、 编写自动化测试套件
仍然是这几个步骤:读取测试用例、执行测试、存储测试结果,只不过方式略有不同而已。我创建了一个名为SQLBufferedHarness的类。封装了读取测试用例的方法readData、执行测试的方法runTest、存储测试结果的方法saveResult。
注意使用数据库存储用例和测试结果就会涉及数据库的连接和关闭操作,对此也做了封装。
SQLBufferedHarness.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathLib;
using System.Collections;
using System.Data.SqlClient;
namespace TestHarnessDesignPartterns
{
class SQLBufferedHarness
{
/// <summary>
/// 打开数据库连接
/// </summary>
/// <param name="connecString"></param>
/// <returns></returns>
public SqlConnection openDBConnec(string connecString)
{
SqlConnection sc = new SqlConnection(connecString);
sc.Open();
return sc;
}
/// <summary>
/// 读取测试用例
/// </summary>
/// <param name="sc"></param>
/// <param name="cmd"></param>
/// <returns></returns>
public ArrayList readData(SqlCommand cmd)
{
SqlDataReader sdr=cmd.ExecuteReader();
ArrayList tcd = new ArrayList();
while (sdr.Read())//main loop
{
string caseid = sdr.GetString(0);
string input = sdr.GetString(1);
string expected = sdr.GetString(2);
TestCase tc = new TestCase(caseid, input, expected);
tcd.Add(tc);
}
return tcd;
}
/// <summary>
/// 运行测试
/// </summary>
/// <param name="testCases"></param>
/// <returns></returns>
public ArrayList runTest(ArrayList testCases)
{
ArrayList tcr = new ArrayList();
TestCase tc = null;
TestCaseResult r = null;
string actual = null;
for (int i = 0; i < testCases.Count; ++i)
{
tc = (TestCase)testCases[i];
string[] inputA = tc.input.Trim().Split(' ');//注意这里要使用Trim()将尾部空白字符串,可能会分解多个空白字符串,后面使用的时候会报字符串不符的错误。
int[] inputs = new int[inputA.Length];
for (int j = 0; j < inputA.Length; ++j)
inputs[j] = int.Parse(inputA[j]);
actual = Methods.ArithmeticMean(inputs).ToString("F4");
if (actual == tc.expected)
r = new TestCaseResult(tc.id, tc.input, tc.expected, actual, "Pass");
else
r = new TestCaseResult(tc.id, tc.input, tc.expected, actual, "FAIL");//如果我们结果写"*FAIL*",由于数据库该字段长度设置为4,因此会报截断字符串的错误
tcr.Add(r);
}//main processing loop
return tcr;
}
public void saveResult(SqlConnection sc, ArrayList testResults)
{
TestCaseResult r=null;
for(int i=0;i<testResults.Count;++i)
{
r=(TestCaseResult)testResults[i];
string runat=DateTime.Now.ToString("s");
string insert="INSERT INTO tblTestResults VALUES('"+r.id+"','"+r.input+"','"+r.expected+ "','"+r.actual+"','"+r.result+"','"+runat+"')";
SqlCommand scInsert=new SqlCommand(insert,sc);
scInsert.ExecuteNonQuery();
}
}
/// <summary>
/// 关闭数据库连接
/// </summary>
/// <param name="sc"></param>
public void closeDBConnec(SqlConnection sc)
{
sc.Close();
}
}
}
然后我们main方法中调用:
SqlConnection connec = null;
SQLBufferedHarness h = new SQLBufferedHarness();
try
{
string dbConnec = "Server=(local);Database=dbTestMethod;Trusted_Connection=yes";
connec = h.openDBConnec(dbConnec);
SqlCommand cmd = new SqlCommand("select * from tblTestCases", connec);
ArrayList testCases = h.readData(cmd);
h.closeDBConnec(connec);//奇怪一个连接不能被共享吗,不关闭会报错
ArrayList testResults = h.runTest(testCases);
connec = h.openDBConnec(dbConnec);
h.saveResult(connec, testResults);
}
catch (Exception ex)
{
Console.WriteLine("Fatal error:" + ex.Message);
}
finally
{
h.closeDBConnec(connec);
}
运行看一下效果吧。我在运行过程中出现过几个问题,经调试解决了,在代码中有注释。
- 自动化测试-使用使用数据库存储测试用例和测试结果
- 自动化测试-使用XML存储测试用例1
- 自动化测试-使用XML存储测试用例2
- net自动化测试之道API测试-存储测试用例执行结果
- expect 自动化测试使用
- Android使用Robotium自动化测试junit生成单元测试结果报告
- 使用selenium和webdriver进行自动化测试
- 用AS使用Uiautomator自动化测试QQ
- 使用Robot进行自动化测试
- 使用Python进行自动化测试
- 使用Python进行自动化测试
- 何时开始使用自动化测试
- 【自动化测试】RIDE的使用
- Jasmine, 自动化测试, 单元测试 --- 使用
- 使用ANT实现自动化测试
- Espresso 自动化测试的使用
- monkey自动化测试使用教程
- android 使用Robotium自动化测试
- HDU3998 Sequence 动态规划+最大流2011 Multi-University Training Contest 16 - Host by TJU
- 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
- 一个跨平台的 C++ 内存泄漏检测器
- D3DXMatrixTranslation D3D中的平移函数
- php中有关缓冲内置函数
- 自动化测试-使用使用数据库存储测试用例和测试结果
- fflush(stdin)和fflush(stdout)
- 明晰C++内存分配的五种方法的区别
- C++ Primer Plus学习:第七章 函数-C++的编程模块(3)
- IT人员迅速提升自我效率的十大方法
- Java同步机制
- iis 访问元数据 有图有真相
- python中的文档字符串(docString)
- Android学习笔记之AndroidManifest.xml文件解析