How to design and implement an automation test case (with Karate)?

Thursday, January 12, 2023
Edit this post


In this article, I'll show you how to design and implement an automation test case at a basic level. The framework I'll be using is Karate framework but you can use whatever framework you want, here we just want to focus on the methodology.


What is Karate?

How to pronounce /kə'rɑ:ti/
Creator Peter Thomas
What is it? Karate is an automation framework that supports a variety of testing types including API test, UI test, and even Performance test. It could be considered as a single unified automation framework.

The main syntax that you mainly use with Karate is Gherkin since it is built on top of Cucumber. Java and Javascript are also supported, however, the usage of them will not be very much.
Official repository and documentation Karate is very well-documented. All detailed information and examples can be found here.
Supported languages Gherkin, Java, Javascript

Example flow

Let's say we are testing a given endpoint as below:

URL http://localhost:80/v1/account
Description This endpoint to create a new (whatever) account
Method POST
Header Content-type: application/json
Request

{
  "name": "Test",
  "description": "Test",
  "category": "Checkings",
  "currency": "USD"
}
        
Response Code: 201

{
  "success": true,
  "data": {
    "id": 1,
    "name": "Test",
    "description": "Test",
    "category": "Checkings",
    "balance": 0,
    "currency": "USD"
  }
}
    
Acceptance criteria
(AC)
- Request.category only accepts ["Checkings", "Savings", "Deposit"]
- Request.currency only accepts ["USD", "VND"]

Design test cases

- In order to implement an automation test case, we need to design a corresponding manual test case first.
- In order to design a manual test case based on test conditions, we need to understand and know how to apply different test techniques.
- Those bullet points from AC are our test conditions, we need to design test cases to cover valid and invalid values of those 2 fields (category, currency).
▪︎ “category” has 3 possible valid values.
▪︎ “currency” has 2 possible valid values.
- For happy (positive) cases, let’s test all these test conditions together in one dedicated scenario.
- For unhappy (negative) cases, let’s create separate test cases for each target field.

Happy cases

It’s obviously that the steps are the same between different test cases, only test data is different, hence we will design only one scenario with a data table. I apply decision-table technique in this case so I can cover all valid values of each field at least once with minimum test cases. Since “category” has the most values (3), there will be at least 3 test cases.

category currency
Checkings USD
Savings VND
Deposit USD

If we want to test all combinations across these 2 fields, there will be 3 x 2 = 6 test cases in total.

category currency
Checkings USD
Checkings VND
Savings USD
Savings VND
Deposit USD
Deposit VND

Now let's write our manual test case (with minimum number of test cases):

Test case Valid account creation
Steps Send a POST request to /v1/account endpoint:

{
  "name": "Test",
  "description": "Test",
  "category": "{category}",
  "currency": "{currency}"
}
    
Test data
category currency
Checkings USD
Savings VND
Deposit USD
Expected - Response code should be 201 Created.
- Response.success should be true.

Negative cases

- We should not test all invalid values for all fields in one case, that way we would not know which field has caused the exception. Let’s separate them. But of course, we can still combine negative values if there’s a way to distinguish which error is caused by which input value by looking at the response.
- Therefore, I would design at least 2 test cases for each field: category, currency.
- In this example, let’s design one negative test case for "currency" field.
- Applying equivalence partitioning (EP) technique, "currency" has 2 partitions (valid partition and invalid partition). Let’s pick one value from each partition.
▪︎ Valid partition: "USD" (or "VND").
▪︎ Invalid: "KIP".
- Since valid partition has been covered in happy cases, we don’t have to test it again, just focus on invalid partition.
- Make sure to input valid values for all other fields, only "currency" will receive an invalid value.

Test case Invalid currency
Steps Send a POST request to /v1/account endpoint:

{
  "name": "Test",
  "description": "Test",
  "category": "Checkings",
  "currency": "{currency}"
}
    
Test data KIP
Expected - Response code should be 400.
- Response.success should be false.
- Response error message should be "Unsupported currency".

Let's implement those test cases

Now we're all set, let’s implement those test cases that we’ve designed. Since we are using Karate framework, let’s write those test cases in Gherkin syntax.

Feature: Test account creation

  Scenario Outline: Valid account creation
    * set apiRequest
      | path        | value        |
      | name        | Test         |
      | description | Test         |
      | category    | '<category>' |
      | currency    | '<currency>' |

    Given url "http://localhost:80/v1/account"
    And requset apiRequest
    And method post
    Then status 201
    * match response.success == true

    Examples:
      | category  | currency |
      | Checkings | USD      |
      | Savings   | VND      |
      | Checkings | USD      |

  Scenario Outline: Invalid currency
    * set apiRequest
      | path        | value        |
      | name        | Test         |
      | description | Test         |
      | category    | Checkings    |
      | currency    | '<currency>' |

    Given url "http://localhost:80/v1/account"
    And requset apiRequest
    And method post
    Then status 400
    * match response.success == false
    * match response.data.message == 'Unsupported currency'

    Examples:
      | currency |
      | KIP      |

Conclusion

That's it. I hope now you have a basic idea on how to deal with automation test cases from A to Z. To be a good automation QA, it's not just about writing code, it's also about having a tester mindset so you can control a full working flow all by yourself.

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...