Skip to content

基于java+testng+数据库的接口自动化测试

Notifications You must be signed in to change notification settings

102244653/InterfaceByDB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[接口测试之数据驱动]

一、简介:

1、使用java发起http/https请求测试接口,快速稳定

2、应用mybatis框架,将测试用例放在数据库维护,方便小组成员共同参与

3、同时生成html和Excel测试报告,报告内容详细清晰,错误日志一目了然

4、方便直接部署在jenkins平台自动测试,一键执行测试用例,还可定时执行

5、支持随时更新/增加测试用例,无需修改代码,可定向设置用例的有效性

6、直接在数据库维护测试套件,可定向测试单个接口或者单条用例,使用简单

二、编写接口参数类:

①每个接口编写一个类,写好所有参数类型

②重写toString()方法,使其返回结果为请求参数格式的数据

③添加一个Result()方法,使其返回结果为ExcelReport数组结果

public class postcode {
public int ID;
public String CaseName;
public String RequestMethod;
public String postcode;
public String areaname;
public String appkey;
public String sign;
public String format;
public String ExpectResult;
public String Effective;

@Override
public String toString(){
    if(!postcode.equals("null")){
        return "?app=life.postcode&postcode="+postcode+"&appkey="+appkey+"&sign="+sign+"&format="+format;
    }else {
        return "?app=life.postcode&areaname="+areaname+"&appkey="+appkey+"&sign="+sign+"&format="+format;
    }

}

//组装报告的结果数组(此方法由于使用频率极高,故建议写成公共方法)
public String[] Result(){
    String[] result =new String[8];
    result[0]= ConfigFile.getUrl("test.url");
    result[1]="PostCode";
    result[2]=CaseName;
    result[3]=RequestMethod;
    result[4]=this.toString();
    result[5]=ExpectResult;
    return result;
}
}

三、读取测试用例:

在src\main\resources\mapper\SQLMapper.xml中按接口用例表添加相应的读取用例的sql

示例:

#查询接口用例总数:
 <select id="postcodecount"  resultType="Integer">
     select count(*) from postcode;
</select>

#查询接口单条用例:
<select id="postcode" 【接口名称即表名】 parameterType="Integer" 【请求参数类型,即读取第几条用例】 resultType="CaseData.postcode" 【返回      的参数类型】>
    select * from postcode where ID=#{id} 【使用#{   }的形式参数化变量】;
</select>

四、数据库用例设计:

每个接口设计一张表,结构统一如下:

①表名==接口名称

②ID==用例编号

③CaseName==用例名称

④RequestMethod==请求方法(post/get)

⑤data==接口参数字段(一个参数一个字段)

⑥ExpectResult==预期结果

⑦Effective==用例是否有效

数据库用例表结构示例:

登录接口参数{用户名|密码|用户类型}
[USER]
| 用例编号 |   用例名称 |      请求方式    |   用户名  |   密码    | 用户类型 |    预期结果   |  用例是否有效 | 
|   ID    |  CaseName  |  RequestMethod  | uasername | password |  type   |  ExpectResult |   Effective  |

    1     正确账号密码登录      post         zhangsan    123456       1     equals[success,1]       T

五、新增接口后编写CASE:

在BaseCase目录下的CaseUtil文件中修改getcasedata方法即可:

创建一个接口类对象勇于接受测试用例数据,然后给BaseCase对象赋值执行用例

    BaseCase casedata=new BaseCase();
    if (casename.equals("postcode")){
        postcode casevalue= DatabaseUtil.getSqlSession().selectOne("postcode",i);
        casedata.setRequest(casevalue.toString()); //请求参数
        casedata.setType(casevalue.getRequestMethod().trim().toLowerCase()); //读取请求类型
        casedata.setExcepct(casevalue.getExpectResult().trim()); //读取预期结果
        casedata.setIsdo(casevalue.getEffective().trim());//是否执行用例
        casedata.setResultExcel(casevalue.Result());//Excel报告结果
    }


其他关键类说明:

1.InitTest用于生成报告,StartTest类需继承它:

public class InitTest {

@BeforeTest
public void beforetest(){
    InitExcelReport.InitExcel();
}

@AfterTest
public void aftertest(){
    new InitHtmlReport().CreatHtmlReport();
}
}

2.StartTest用于执行用例,调用BaseCase基类处理数据、执行用例、记录结果:

public class StartTest extends InitTest{

private static Logger logger = LoggerFactory.getLogger(StartTest.class);

@Test(dataProvider="TestData",dataProviderClass= DataSource.class)
public  void StartTest(String caseqty ,String casename){
    BaseCase baseCase=new BaseCase();
    try {
    【先读取用例总数,然后for()循环执行用例】
        baseCase.executecase(caseqty,casename);
    } catch (IOException e) {
        logger.error("\n本次测试执行过程中出现异常,具体原因如下:\n\n"+ ExceptionUtil.getStackTrace(e));
    }
}
}

3.DataSource使用数据驱动读取需要测试套件内容,驱动测试执行:

六、结果断言:

预期结果的格式:
比较方式[字段名:预期结果];比较方式[字段名:预期结果] 
例: contain[key:vlaue];equals[key:vlaue]

1.可自定义支持结果长度的比较,需要根据实际情况在AnylistJson类修改getsize()方法即可
2.同时支持多个字段的校验,使用 ; 分隔即可
3.断言字典如下:
    equals  ---  等于value
    contain ---  包含value
    length  ---  长度等于(未具体实现)
    start   ---  以value开头
    end     ---  以value结尾       

取值函数:GetJsonByJpath.getValueByJPath(JSONObject responseJson, String jpath)
Json示例:
{
"status":"success",
"data":[
{"uid":10000024,"orderId":138531,"changeCredit":"105000","datetime":"2018-12-21 16:02:23"},
{"uid":10000026,"orderId":138532,"changeCredit":"103200","datetime":"2018-12-21 16:02:28"},
{"info":[{"test":"1219"},{"test":"mytest"}]}
],
"newCredit":"43202874.28",
}    

JPath路径:
success     取值 => status
10000024    取值 => data[0]/uid
138532      取值 => data[1]/orderId
mytest      取值 => data[2]/info[1]/test
43202874.28 取值 => newCredit

七、使用testng数据驱动从数据库直接读取测试套件,避免反复修改testng.xml:

1.新建测试套件表suitcase:
   public int id;
    public String casename;//查询接口名称的sql的id
    public String caseqty;//查询接口对应的用例数量的sql的id
    public String effictive;//是否执行该接口用例

     @Override
    public String toString(){
    return "编号:"+id+",测试接口名称:"+casename+",接口用例数量:"+caseqty+",本次是否执行(T-执行/F-不执行):"+effictive;
    }
    
    
 2.在/TestCase/DataSource下使用数据驱动读取测试套件表,返回规定的object[][]格式参数,驱动测试执行
 
 3.新建testurl表(一个字段即可),指定当前的测试所需要读取的测试环境:
    测试环境配置在/resource/application.properties中配置
    SIT--测试环境
    UAT--验收环境
    PRO--生产环境
 
 4.通过StartTest方法一键执行所有用例

八、ExcelReport数据结构:

①ID==用例编号(从1自增)

②CaseName==用例名称(数据库读取)

③ApiName==接口名称(表名)

④TestURL==测试地址(代码里配置)

⑤RequestData==请求参数(数据库读取)

⑥ExpectResult==预期结果(数据库读取)

⑦ResponseData==响应结果

⑧Result==测试结果(Pass/Fail,默认为Fail)

⑨每条用例执行结束后组装ExccelReport和HtnlReport数据,并写入结果

九、部署jenkins持续集成环境,执行用例:

jenkins部署自行百度,部署好新建基于maven的任务,执行指定的testng.xml文件即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="API自动化测试" >
<test name="测试">
    <classes>
        <class name="TestCase.StartTest"></class>
    </classes>
</test>
</suite>

执行结束后在TestReport查看Excel报告和TestReport查看html报告

十、部署测试报告小平台:

在jenkins服务器上搭建一个tomcat环境,然后在jenkins上通过shell脚本将每次执行的报告拷贝至/webapps/ROOT目录下,则
可通过链接查看测试报告:

shell命令参考(百度可查):

result=$(curl -s http://ip:端口/job/项目名称/lastBuild/buildNumber  --user 用户名:密码)   --result 即jenkins任务执行编号,据
此创建文件夹

mkdir  在tomcat目录的webapps/ROOT下创建/$result文件夹

cp /root/.jenkins/workspace/项目名称/TestReport/index.html   ./webapps/ROOT/$result/index.html

最后使用链接即可访问测试报告:
http://IP:端口/result/index.html

十一、执行结束后可使用插件自动发送邮件:

1.jenkins发送邮件可自行百度

2.亦可新建任务自己通过脚本实现邮件发送

About

基于java+testng+数据库的接口自动化测试

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published