再次回眸-封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meiceatcsdn/article/details/83387161

话说:

各位读者盆友,晚上好!这里跟大家分享一下自动化测试过程中的小封装。

目录


一、背景
二、案例
三、总结


一、背景
在写自动化测试时候,用的是Rest-Assured框架,在自动创建各种账号的时候,遇到很多次这种情形:

eg:
用户提出一个申请==》BOSS端审核 =》结果。
今天就围绕这么一个简单的过程来体会看下回顾下自己的封装过程。

二、案例

版本一:
环节1:提出申请

 public boolean getRealNameIdentificationByUserName(TestUsers user) throws AuthException, IOException {
        String temporyUserName = user.getUserName();
        String temporyPassword = user.getPassword();
        user.setUserName("jiawei|"+user.getUserName());
        user.setPassword("888888");
        String userToken = AuthProvider.auth(user);
        System.out.println("得到用户的Token是:"+userToken);
        user.setUserName(temporyUserName);
        user.setPassword(temporyPassword);
        Object obj =  RestAssured.given().log().all()
                .contentType(ContentType.JSON)
                .cookie(AuthProvider.DZJ_TOKEN,userToken)
                .body(UserFactory.createRandomRealNameIdentificationCommand(user))
                .post(URLConstant.BDC_USER_REAL_NAME_APPLY)
                .then().log().all()
                .statusCode(200)
                .extract().path("data");
        System.out.println("实名认证请求结果: "+obj);
        return (boolean)obj;

    }

环节2:获取申请ID。
//获取实名认证申请ID

public int getRealNameApplicationId(TestUsers user) {
    List<HashMap> applicationList = RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .when()
            .get(URLConstant.BDC_USER_REAL_NAME_APPLY_LIST)
            .then().log().all()
            .statusCode(200)
            .extract().path("data");
    int applicationId = 0;
    for(int i=0;i<applicationList.size();i++) {
        if(applicationList.get(i).get("name").equals(user.getUserName())) {
            System.out.println("遇到相等的ID拉?   ");
            applicationId =  (int)applicationList.get(i).get("id");
        }
    }
    return applicationId;
}

环节3:BOSS端审核通过或者不通过

//BOSS端审核通过

public boolean  getIdentifyRealNameByBoss(int applicationId,boolean approved ) {
    Object obj = null;
    if(approved) {
        IdentifyRealNameCommand identifyRealNameCommand = new IdentifyRealNameCommand();
        identifyRealNameCommand.setApplicationId((long)applicationId);
        identifyRealNameCommand.setApproved(approved);
        obj = RestAssured.given().log().all()
                .contentType(ContentType.JSON)
                .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
                .body(identifyRealNameCommand)
                .post(URLConstant.BDC_USER_REAL_NAME_APPLY_AUDIT)
                .then().log().all().statusCode(200)
                .extract().jsonPath().get("data");
        System.out.println("BOSS端审核通过结果:"+obj);
    }
    return (boolean)obj;
}


//BOSS端审核不通过
public boolean getIdentifyRealNameByBoss(int applicationId,boolean approved,String comment) {
    Object obj = null;
    if(!approved) {
        IdentifyRealNameCommand identifyRealNameCommand = new IdentifyRealNameCommand();
        identifyRealNameCommand.setApplicationId((long)applicationId);
        identifyRealNameCommand.setApproved(approved);
        identifyRealNameCommand.setComment(comment);
        obj = RestAssured.given().log().all()
                .contentType(ContentType.JSON)
                .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
                .body(identifyRealNameCommand)
                .post(URLConstant.BDC_USER_REAL_NAME_APPLY_AUDIT)
                .then().log().all().statusCode(200)
                .extract().jsonPath().get("data");
        System.out.println("BOSS端实名认证 审核不通过结果:"+obj);

    }
    return  (boolean)obj;
}


认真看下前面的内容,后面主要针对获取申请ID和BOSS端审核2个方法进行优化。

版本二

我们先来看BOSS端获取申请ID方法的优化过程:

//1.返回申请ID
public static int getUserQualficationApplicationId(TestUsers user) {
    List<HashMap> applicationList = RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .when()
            .param("status","WAIT_TO_AUDIT")
            .param("limit",1000)
            .get(URLConstant.BDC_DOCTORS_CERTIFICATION_APPLICATIONS)
            .then().log().all()
            .statusCode(200)
            .extract().path("data");
    int applicationId = 0;
    for(int i=0;i<applicationList.size();i++) {
        if(user.getUserName() != null){
            if(applicationList.get(i).get("name").equals(user.getUserName())) {
                System.out.println("遇到相等的ID拉?   ");
                applicationId =  (int)applicationList.get(i).get("id");
            }
        }
    }
    return applicationId;
}

这里存在什么问题?
有几个地方写固定了,比如:
1)申请的状态,.param(“status”,“WAIT_TO_AUDIT”)
在BOSS端,申请的列表可能有几种状态:待审核、已通过、已驳回,不同的审核列表表述还可能不一样。所以这里写死,意味着每次都得改。
2) .get(URLConstant.BDC_DOCTORS_CERTIFICATION_APPLICATIONS)
URL写固定了,最不好。不同的申请,调用的接口都不同,写死了就意味着今天实名认证申请,你的更换URL;明天医学联络官申请,你的更换URL;后天病历运维专家申请,你也得更换URL…
3)if(applicationList.get(i).get(“name”).equals(user.getUserName()))
遍历判断什么时候返回ID的时候,需要比较的条件写固定了。这里也不好,今天可能比较的是name,明天可能比较的是userName.

所以,接下来优化这几个地方。

//BOSS端获取申请ID
public int getApplicationId(TestUsers user,String applicationStatus,String url,String comparationAttribute ) {
    List<HashMap>  applicationList =      RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .param("applicationStatus",applicationStatus)
            .param("limit",1000)
            .get(url)//BDC_CASE_EXPERT_CASE_EXPERT_APPLICATION_LIST
            .then().log().all()
            .statusCode(200).extract().path("data");
    System.out.println("得到的申请列表是:"+applicationList);
    int applicationId = 0;
    //遍历列表,获取申请id
    for(int i=0;i<applicationList.size();i++) {
        if(applicationList.get(i).get(comparationAttribute).equals(user.getUserName())) {
            System.out.println("找到啦"+applicationList.get(i).get("id"));
            applicationId = (int)applicationList.get(i).get("id");
        }
    }

    return applicationId;
}

参数都抽离出来,只要是类似的申请,在BOSS端都可以返回申请ID,非常灵活。

版本三

最后优化BOSS端审核方法

1)实名认证申请:
//BOSS端审核通过
public boolean  getIdentifyRealNameByBoss(int applicationId,boolean approved ) {
    Object obj = null;
    if(approved) {
        IdentifyRealNameCommand identifyRealNameCommand = new IdentifyRealNameCommand();
        identifyRealNameCommand.setApplicationId((long)applicationId);
        identifyRealNameCommand.setApproved(approved);
        obj = RestAssured.given().log().all()
                .contentType(ContentType.JSON)
                .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
                .body(identifyRealNameCommand)
                .post(URLConstant.BDC_USER_REAL_NAME_APPLY_AUDIT)
                .then().log().all().statusCode(200)
                .extract().jsonPath().get("data");
        System.out.println("BOSS端审核通过结果:"+obj);
    }
    return (boolean)obj;
}

这里的2个参数完全是多余的,直接可以把command扔进去即可。一般>3个参数,就封装成一个Command,不要让一个方法带有过多参数,显得混乱。



2)这是医生资质申请:
//2.审核通过
public void identifyDoctorQualification(IdentifyDoctorQualificationCommand command){
    RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .body(command)
            .post(URLConstant.BDC_DOCTORS_CERTIFICATION_AUDIT)
            .then().log().all()
            .statusCode(200);
}



3)病历运维专家申请通过:

//BOSS端审核通过

public void  approvedByBoss(IdentifyCaseExpertCommand command) {
    RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .body(command)
            .post(URLConstant.BDC_CASE_EXPERT_AUDIT_CASE_EXPERT_APPLICATION)
            .then().log().all()
            .statusCode(200);
}

看到这里,相同的方法重复了3遍!本质都是审核通过一个申请,所以抽离出来。

//BOSS端审核通过完全可以抽离出来
public void approvedByBoss(Object obj,String operatorToken,String url) {
    RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .body(obj)
            .post(url)
            .then().log().all()
            .statusCode(200);
}

所以 BOSS端获取申请ID=》BOSS端审核通过整体封装如下:

//BOSS端获取申请ID
public int getApplicationId(TestUsers user,String applicationStatus,String url,String comparationAttribute ) {
    List<HashMap>  applicationList =      RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .param("applicationStatus",applicationStatus)
            .param("limit",1000)
            .get(url)//BDC_CASE_EXPERT_CASE_EXPERT_APPLICATION_LIST
            .then().log().all()
            .statusCode(200).extract().path("data");
    int applicationId = 0;
    //遍历列表,获取申请id
    for(int i=0;i<applicationList.size();i++) {
        if(applicationList.get(i).get(comparationAttribute).equals(user.getUserName())) {
            applicationId = (int)applicationList.get(i).get("id");
        }
    }

    return applicationId;
}



//BOSS端审核
public void approvedByBoss(Object obj,String operatorToken,String url) {
    RestAssured.given().log().all()
            .contentType(ContentType.JSON)
            .cookie(AuthProvider.DZJ_TOKEN,operatorToken)
            .body(obj)
            .post(url)
            .then().log().all()
            .statusCode(200);
}

以上代码就很通用了。

三、总结

总结:多写,多写,多写。

再会!

猜你喜欢

转载自blog.csdn.net/meiceatcsdn/article/details/83387161