Python pytest 테스팅 기초 (QA) 01강
01 PyTest 설치
1
|
pip install pytest
|
cs |
02 PyCharm 환경설정 변경
PyCharm - Settings (Preferences) - Tools - Diff & Merge - Python Integrated Tools - Testing - pytest
03 pytest 설치 확인
PyCharm - Terminal - Local - Command - pytest 입력하고 엔터
04 New PyCharm 프로젝트 만들기
05 New File (test_ch1.py) 만들기
1
2
3
4
5
6
7
8
9
10
11
12
|
# argument로 이름 (문자열 타입)을 받고
# 이름 내 모음 개수를 반환하는 함수 작성하기
def vowel_count(string):
vowels = ['a', 'e', 'i', 'o', 'u']
count = 0
for ch in string:
if ch in vowels:
count = count + 1
return count
print(vowel_count("honbobman")) # 본인의 이름을 pass
|
cs |
"honbobman"이라는 문자열에는 3개의 모음 ('o', 'o', 'a')이 있습니다. 그러므로 'vowel_count' 함수는 integer 3을 반환할 것입니다.
06 테스트 케이스 작성하기
1
2
3
4
5
6
|
def test_with_my_first_name():
assert vowel_count('honbobman') == 3
def test_with_my_last_name():
assert vowel_count('choi') == 2
|
cs |
이름을 '성' (lastname)과 '이름' (firstname)으로 나누어서 테스트 케이스를 작성했다.
07 테스트 케이스 실행하기
Settings - Python Integrated Tools - pytest로 설정했다면 테스트 케이스를 작성하면 라인 넘버 옆에 초록색 재생 버튼이 생성된다. 테스트 케이스를 실행하려면 초록색 재생 버튼을 누르면 된다.
test_with_my_first_name PASSED. 'honbobman'이라는 문자열에 모음이 3개가 있어서 Pass 했다.
'choi'이라는 문자열에 모음이 2개가 있어서 Pass 했다.
만약 테스트 케이스를 일부러 틀리게 작성하면 어떻게 될까? 'test_with_my_last_name' 테스트 케이스에 'choi'를 패스하고, 예상 반환값에 2가 아닌 4를 넣어보자.
당연히 (?) 아래와 같이 에러 코드가 등장한다. 실제값과 테스트 케이스의 예상값이 다르다는 내용이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
============================= test session starts =============================
collecting ... collected 1 item
test_ch1.py::test_with_my_last_name FAILED [100%]
test_ch1.py:19 (test_with_my_last_name)
2 != 4
Expected :4
Actual :2
<Click to see difference>
def test_with_my_last_name():
> assert vowel_count('choi') == 4
E assert 2 == 4
E +2
E -4
test_ch1.py:21: AssertionError
============================== 1 failed in 0.10s ==============================
|
cs |
07 테스트 케이스 수정하기
사실 위 작성한 테스트 케이스에는 오류가 있다. 고의적으로 오류가 발생하도록 테스트 케이스를 작성해보자.
1
2
3
4
5
6
|
def test_with_my_first_name():
assert vowel_count('HONBOBMAN') == 3
def test_with_my_last_name():
assert vowel_count('CHOI') == 2
|
cs |
함수에 이름을 패스할 때 대문자로 패스하면 테스트 오류 결과가 발생할 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
============================= test session starts =============================
collecting ... collected 1 item
test_ch1.py::test_with_my_first_name FAILED [100%]
test_ch1.py:15 (test_with_my_first_name)
0 != 3
Expected :3
Actual :0
<Click to see difference>
def test_with_my_first_name():
> assert vowel_count('HONBOBMAN') == 3
E assert 0 == 3
E +0
E -3
test_ch1.py:17: AssertionError
============================== 1 failed in 0.11s ==============================
|
cs |
그렇다면 함수에 이름을 패스할 때 이름이 소문자이거나 대문자이거나 모두 제대로 테스트될 수 있도록 수정하자.
1
2
3
4
5
6
7
|
def vowel_count(string):
vowels = ['a', 'e', 'i', 'o', 'u']
count = 0
for ch in string.lower():
if ch in vowels:
count = count + 1
return count
|
cs |
08 더 많은 테스트 케이스 작성하기
위에는 이름의 모음 개수를 카운트 했다. 이제는 자음의 개수를 테스트하는 테스트 케이스를 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def consonant_count(string):
vowels = ['a', 'e', 'i', 'o', 'u']
count = 0
for ch in string.lower():
if ch not in vowels:
count = count + 1
return count
def test_with_my_first_name_consonant():
assert consonant_count('HONBOBMAN') == 6
assert consonant_count('HONBOBMAN') == len('HONBOBMAN') - vowel_count('HONBOBMAN')
def test_with_my_last_name_consonant():
assert consonant_count('CHOI') == 2
assert consonant_count('CHOI') == len('CHOI') - vowel_count('CHOI')
|
cs |
결과는 역시 PASSED! 구체적이고 섬세한 테스트 케이스를 작성하고 테스트하는 것이 소프트웨어 품질을 결정한다고 볼 수 있다. 테스트 케이스 작성하는 일이 재미 없고 지루할 수도 있어도 소프트웨어의 품질을 결정하는 것뿐만 아니라 미래의 소프트웨어 기획에도 영향을 미친다.
'공부 > 파이썬 Python' 카테고리의 다른 글
Python Django 파이썬 장고 설치 방법 (0) | 2022.02.02 |
---|---|
Python pytest 테스팅 기초 (QA) 02강 (0) | 2022.02.01 |
구글 검색 알고리즘 구현하기 with Python (0) | 2022.01.31 |
Password Generator (자동 비밀번호 생성기) with Python (0) | 2022.01.29 |
비밀번호 강력도 확인 (Password Strength Checker) with Python (0) | 2022.01.26 |
댓글