Skip to content

Commit 21e5c04

Browse files
authored
Merge pull request #5 from xenony/phase5
Phase 5 API testing with 'Requests'
2 parents a04d8ff + b089d5c commit 21e5c04

File tree

4 files changed

+179
-1
lines changed

4 files changed

+179
-1
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
command: |
2828
. venv/bin/activate
2929
chmod -R 777 ./allure-2.11.0/bin/
30-
pytest --alluredir=./allure-results
30+
pytest --alluredir=./allure-results tests/test_jira_api.py
3131
- run:
3232
name: run report
3333
when: always

src/jira_api.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import requests
2+
import json
3+
import allure
4+
from src.json_fixtures import JSONFixture
5+
6+
username = "OlegAverkin"
7+
password = "OlegAverkin"
8+
base_url = "https://jira.hillel.it"
9+
create_issue = base_url + "/rest/api/2/issue"
10+
search_issue = base_url + "/rest/api/2/search"
11+
modify_issue = base_url + "/rest/api/2/issue/{0}"
12+
13+
headers = {
14+
"Authorization": "Basic T2xlZ0F2ZXJraW46T2xlZ0F2ZXJraW4=",
15+
"Content-Type": "application/json; charset=utf8"
16+
}
17+
18+
created_issues = []
19+
j = JSONFixture()
20+
21+
22+
class JiraApi:
23+
24+
@allure.step
25+
def login(self, username, password):
26+
result = requests.get(base_url, auth=(username, password))
27+
return [result.status_code, result.headers.get("X-Seraph-LoginReason")]
28+
29+
@allure.step
30+
def search_issue(self, issue_name, start=0, max_results=10):
31+
result = requests.post(search_issue, data=json.dumps(j.search_issue(issue_name, start, max_results)),
32+
headers=headers)
33+
return result
34+
35+
@allure.step
36+
def post_issue(self, summary, assignee, priority):
37+
result = requests.post(create_issue, data=json.dumps(j.create_issue(summary, assignee, priority)),
38+
headers=headers)
39+
if result.status_code == 400:
40+
return result
41+
else:
42+
created_issues.append(result.json().get('id'))
43+
return result
44+
45+
@allure.step
46+
def update_issue(self, issue_id, summary, assignee, priority):
47+
result = requests.put(modify_issue.format(issue_id), data=json.dumps(j.create_issue(summary, assignee, priority)),
48+
headers=headers)
49+
return result
50+
51+
@allure.step
52+
def delete_issue(self, issue_id):
53+
result = requests.delete(modify_issue.format(issue_id), headers=headers)
54+
return result
55+
56+
@allure.step
57+
def delete_all_issues(self):
58+
response_codes_list = []
59+
for issue_id in created_issues:
60+
result = JiraApi.delete_issue(self, issue_id)
61+
response_codes_list.append(result.status_code)
62+
return response_codes_list

src/json_fixtures.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class JSONFixture:
2+
3+
def create_issue(self, summary, assignee, priority):
4+
json = {
5+
"fields": {
6+
"project":
7+
{
8+
"key": "WEBINAR"
9+
},
10+
"summary": summary,
11+
"description": "Creating of an issue",
12+
"assignee": {"name": assignee},
13+
"priority": {"name": priority},
14+
"issuetype": {"name": "Bug"}
15+
}
16+
}
17+
return json
18+
19+
def search_issue(self, issue_name, start, max_results):
20+
json = {
21+
"jql": "summary~" + issue_name,
22+
"startAt": start,
23+
"maxResults": max_results
24+
}
25+
return json

tests/test_jira_api.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import pytest
2+
from src.jira_api import *
3+
4+
api = JiraApi()
5+
6+
7+
class TestSuite:
8+
9+
@allure.tag('api')
10+
@allure.title("Login via API")
11+
@pytest.mark.api
12+
@pytest.mark.parametrize("response,expected", [
13+
(api.login("OlegAverkin", "fake"), [401, "AUTHENTICATED_FAILED"]),
14+
(api.login("fake", "OlegAverkin"), [401, "AUTHENTICATED_FAILED"]),
15+
(api.login("OlegAverkin", "OlegAverkin"), [200, "OK"]), ])
16+
def test_login_to_jira(self, response, expected):
17+
assert response == expected
18+
19+
@allure.tag('api')
20+
@allure.title("Post issue")
21+
@pytest.mark.api
22+
def test_post_issue(self):
23+
response = api.post_issue("OA API Issue001", "OlegAverkin", "Low")
24+
assert response.status_code == 201
25+
26+
@allure.tag('api')
27+
@allure.title("Update issue")
28+
@pytest.mark.api
29+
def test_update_issue(self):
30+
response = api.post_issue("OA API Issue002 ", "OlegAverkin", "Medium")
31+
issue_id = response.json().get('id')
32+
response_update = api.update_issue(issue_id, "OA API Issue002 Updated", "OlegAverkin", "Low")
33+
assert response_update.status_code == 204
34+
35+
@allure.tag('api')
36+
@allure.title("Post multiple issues")
37+
@pytest.mark.api
38+
@pytest.mark.parametrize("response,expected", [
39+
(api.post_issue("OA API Issue003", "OlegAverkin", "Low"), 201),
40+
(api.post_issue("OA API Issue004", "OlegAverkin", "Low"), 201),
41+
(api.post_issue("OA API Issue005", "OlegAverkin", "Low"), 201),
42+
(api.post_issue("OA API Issue006", "OlegAverkin", "Low"), 201)])
43+
def test_post_issues(self, response, expected):
44+
assert response.status_code == expected
45+
46+
@allure.tag('api')
47+
@allure.title("Missing required fields")
48+
@pytest.mark.api
49+
def test_post_issue_missing_fields(self):
50+
response = api.post_issue("", "OlegAverkin", "Low")
51+
assert response.status_code == 400
52+
assert response.json().get('errors').get('summary') == "You must specify a summary of the issue."
53+
54+
@allure.tag('api')
55+
@allure.title("Long summary")
56+
@pytest.mark.api
57+
def test_post_issue_long_summary(self):
58+
response = api.post_issue("AO" * 256, "OlegAverkin", "Low")
59+
assert response.status_code == 400
60+
assert response.json().get('errors').get('summary') == "Summary must be less than 255 characters."
61+
62+
@allure.tag('api')
63+
@allure.title("Test search issue")
64+
@pytest.mark.api
65+
def test_search_1_issue(self):
66+
response = api.search_issue("Issue001")
67+
assert response.status_code == 200
68+
assert response.json().get('total') == 1
69+
70+
@allure.tag('api')
71+
@allure.title("Test five issue")
72+
@pytest.mark.api
73+
def test_search_5_issues(self):
74+
response = api.search_issue("OA")
75+
assert response.status_code == 200
76+
assert response.json().get('total') == 6
77+
78+
@allure.tag('api')
79+
@allure.title("Test search unknown issue")
80+
@pytest.mark.api
81+
def test_search_none_issue(self):
82+
response = api.search_issue("somethingwrong")
83+
assert response.status_code == 200
84+
assert response.json().get('total') == 0
85+
86+
@allure.tag('api')
87+
@allure.title("Delete all issues")
88+
@pytest.mark.api
89+
def test_delete_all_issues(self):
90+
response = api.delete_all_issues()
91+
assert len(response) == 6

0 commit comments

Comments
 (0)