前些日子,CTO给我下达了对成熟模块进行自动化测试的任务。要求抛离开工具,做一些自动化测试。没有思路和方向,自己开始在上网查阅些资料,看了一些将手动测试转变自动化。无异于就是手动写脚本测试,实现工具能完成的功能。得到这个点,开始定位、摸索和实践。
从概念入手进行剖析,对于自动化测试的概念,网络上可以说是多如牛毛,自己还是比较倾向于:用工具或编码模拟人工操作,记录结果并和预先设定的结果进行比较,而达到测试的目的!
从公司产品进行入手,公司的产品架构为LAMP(Linux+Apache+Mysql+Php),以网站为主要产品。
得到以上信息和需求定义后,开始着手操作,总共思路有二:
第一 网站的测试
第二 类和方法的测试
先说第一 网站测试:
进行网站测试,以百度为例,提供入口,要求用户输入网址
显示如下:
很简单的一个入口
代码如下:
<form id="UrlForm" name="UrlForm" method="post" action="test2.php">
请输入链接:
<label>
<input name="Url" type="text" id="Url" value="http://" />
</label>
<input name="提交" type="submit" id="提交" value="提交" />
</form>
用户输入www.baidu.com后,自动跳转到test2.php进行处理
思路:把搜索的关键字 存在数据库中,通过调用数据库,达到自动读取关键字,并通过打开页面,进行搜索,然后对搜索的页面 进行数据抓取 并输出结果
显示如下:
代码如下:
<?php
//error_reporting(E_ALL);
require_once "conn.php";//与数据库连接
$mysql="select LK_Name from links"; //搜索出数据库中的值
$result=mysql_query($mysql);
$thurl=$_POST['Url'];
if($num=mysql_num_rows($result)){
while($row=mysql_fetch_array($result)){
$ie = new COM("InternetExplorer.Application");
$ie->Visible = True;
//$ie->Visible = False;
$ie->Navigate($thurl);
//echo '<pre>';var_dump($ie);
while($ie->Busy)
{
com_message_pump(4000);
}
$ie->document->all->f->wd->focus();
$ie->document->all->f->wd->value = $row['LK_Name'];
$kd=$ie->document->all->f->wd->value;
$ie->document->all->f->submit();
//echo '<pre>';var_dump($ie);
//exit;
//$ie = null;
if (!($contents = file_get_contents("".$thurl."/s?wd=".$kd."")))
{
//echo $contents;
echo 'Could not open URL';
exit;
}
if (preg_match_all("|$kd|",$contents,$matches))
{
//echo '<pre>';var_dump($matches);
for($i=0;$i<count($matches[0]);$i++){
//exit;
print "A match was found:".$matches[0][$i];
echo "<br />";
}
echo count($matches[0]);
echo "<br />";
} else {
print "A match was not found.<br />";
}
}
}
?>
第二 对方法和类的测试
通过调用写好的类中的方法,实现对数据库中的值进行计算,并把该方法得到的值 存入数据库中,和预先设置的值进行对比 然后输出正确和错误的结果!
先写一个方法,以加法为例,命名为add.php
代码如下:
<?php
class add
{
function Num_Add($i,$j)
{
return $i+$j;
}
}
?>
读取数据并插入到表中,代码如下:
<?php
require_once "add.php";
require_once "conn.php";
$mysql="select T_ID,A_Data,B_Data,A_Result,V_Result from test";
$result=mysql_query($mysql);
if($num=mysql_num_rows($result))
{
while($row=mysql_fetch_array($result)){
$abc=new add;
$a=$abc->Num_Add($row['A_Data'],$row['B_Data']);
$updatesql="update test set A_Result='".$a."'where T_ID='".$row['T_ID']."'";
mysql_query($updatesql);
}
}
echo "<script>alert('计算结束!');location.href='validtae.php';</script>";
?>
进行对比,代码如下:
<?php
require_once "conn.php";
$mysql="select A_Result,V_Result from test";
$result=mysql_query($mysql);
if($num=mysql_num_rows($result))
{
$correct=0;
$worng=0;
while($row=mysql_fetch_array($result))
{
if($row['A_Result']==$row['V_Result'])
{
$correct++;
}
else
{
$worng++;
}
}
echo "正确数据有:".$correct."条!";
echo "<br>";
echo "错误数据有:".$worng."条!";
}
?>