美文网首页
2018-10-10 Cucumber之API测试

2018-10-10 Cucumber之API测试

作者: Janny_lwj | 来源:发表于2018-10-10 09:26 被阅读0次

    Prepare enviroment

    • Download IntelliJ IDEA

    新建一个gradle工程

    add dependency in project

        compile "org.projectlombok:lombok:1.16.18"
        compile('org.springframework.boot:spring-boot-starter')
        compile('org.springframework.boot:spring-boot-starter-test')
        compile group: 'org.springframework', name: 'spring-web', version:'5.0.8.RELEASE'
        compile group: 'com.alibaba', name: 'fastjson', version:'1.2.47'
        //compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version:'2.8.10'
        compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version:'2.8.10'
        compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version:'2.8.0'
        compile group: 'io.cucumber', name: 'cucumber-java', version:'2.3.1'
        compile group: 'io.cucumber', name: 'cucumber-junit', version:'2.3.1'
        compile group: 'junit', name: 'junit', version:'4.12'
        compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version:'3.13.0'
        compile 'com.google.guava:guava:18.0'
        compile 'org.apache.httpcomponents:httpclient:4.4.1'
    

    Develop API Framework

    • Get Token example for "x-www-form-urlencoded"
    String tokenURL =" Your token url";
            HttpHeaders tokenRequestHeaders = new HttpHeaders();
            tokenRequestHeaders.add("Content-Type", " application/x-www-form-urlencoded");
            tokenRequestHeaders.add("Accept", "application/json");
            String tokenRequestBody = "Your project body"(can check in postman)
            //tokenRequestHeaders.add("Authorization", "Basic Y2xpZW50OnBhc3N3b3Jk");
            RestTemplate tokenTemplate = new RestTemplate();
            //HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(popHeaders(), tokenRequestHeaders);
            HttpEntity<String> tokenRequestEntity = new HttpEntity<String>(tokenRequestBody, tokenRequestHeaders);
            ResponseEntity<String> tokenResponse = tokenTemplate.exchange(tokenURL, HttpMethod.POST, tokenRequestEntity, String.class);
            JSONObject tokenResponseBody = JSONObject.parseObject(tokenResponse.getBody());
            String accessToken = tokenResponseBody.get("access_token").toString();
            return accessToken;
    
    • Get Token example for "form-data"
    String tokenURL =" Your token url";
            HttpHeaders tokenRequestHeaders = new HttpHeaders();
            tokenRequestHeaders.add("Content-Type", " form-data");
            tokenRequestHeaders.add("Accept", "application/json");
            String tokenRequestBody = "Your project body"(can check in postman)
            //tokenRequestHeaders.add("Authorization", "Basic Y2xpZW50OnBhc3N3b3Jk");
            RestTemplate tokenTemplate = new RestTemplate();
            HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(popHeaders(), tokenRequestHeaders);
            //HttpEntity<String> tokenRequestEntity = new HttpEntity<String>(tokenRequestBody, tokenRequestHeaders);
            ResponseEntity<String> tokenResponse = tokenTemplate.exchange(tokenURL, HttpMethod.POST, request , String.class);
            JSONObject tokenResponseBody = JSONObject.parseObject(tokenResponse.getBody());
            String accessToken = tokenResponseBody.get("access_token").toString();
            return accessToken;
    
    
    protected static MultiValueMap<String, String> popHeaders() {
            MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
          //get from postman
            map.add("grant_type","grant_type");
            map.add("username","user_name");
            map.add("password","user_password");
            return map;
        }
    
    • Send request to API
     public static ResponseEntity<String> getObject() {
            String accessToken = Token.getToken();
    
            String url = "api_url";
            HttpHeaders APIRequestHeaders = new HttpHeaders();
            APIRequestHeaders.add("Authorization", "bearer " + accessToken);
            APIRequestHeaders.add("Content-Type", "application/json");
            RestTemplate APITemplate = new RestTemplate();
            HttpEntity<String> APIRequestEntity = new HttpEntity<String>(null, APIRequestHeaders);
            ResponseEntity<String> APIResponse = APITemplate.exchange(url, HttpMethod.GET, APIRequestEntity, String.class);
            return APIResponse;
        }
    
    • Analyze response code
     public void Get_Response(String id) throws Exception {
            ResponseEntity<String> APIResponse = Service.getSomeById(aliasValue(id), Object().toBuilder().name(aliasValue(id)).build(),1);
            actualStatusCode = APIResponse.getStatusCodeValue();
            String body="["+APIResponse.getBody()+"]";
            JSONArray APIResponseBody = JSONArray.parseArray(body);
            JSONObject firstImage = APIResponseBody.getJSONObject(0);
        }
    

    Develop test cases for API

    • Develop .feature file
    Under Resources, add .feature file for your project
    For Cucumber some key word:
    - Feature
    - Scenario
    - Before
    - Given
    - When
    - Then
    - And
    - After
    
    should add some tags in the .feature file
    For example:
    @Tag1
    @Tag1_ForFeature1
    Feature: This feature is for test
    
    @Tag1_ForFeature1_Test1
    Scenario: I want to do something
        Given a precondition
        When I do something
        Then should get result1(assertion)
        And should get result2(assertion)
    

    -Develop step definition

    In Src folder add, java classes for step definitions
    Add function for each step
    In step definition, should implement all steps in .feature file 
    
    • Trigger Run
    Add a class: Run CucumberTest under test
    @RunWith(Cucumber.class)
    @CucumberOptions(features = "src/main/resources",tags = "@tag")
    public class RunCucumberTest {
    }
    
    
    • That's all.

    相关文章

      网友评论

          本文标题:2018-10-10 Cucumber之API测试

          本文链接:https://www.haomeiwen.com/subject/smguaftx.html