Pytest學習筆記7——接口自動化測試框架實戰附源碼(開荒篇)

  引言

  前面介紹了pytest框架一些基礎知識與基本用法,掌握了必定基礎後,咱們能夠進行項目實戰,搭建pytest接口自動測試框架。javascript

  框架設計思路

  畫了一張草圖,你們自行領會。java

 

   項目結構

 

 

  源碼展現

  將test_weatherapi.py測試用例源碼附上,關鍵部分都有備註,知識點覆蓋以前所講的。web

city = ['北京','上海','廣州','深圳']
@allure.step('參數化請求數據: %s'% city)
def step_1():
    print("初始化數據")
    return city


# city = ['北京','上海','廣州','深圳']
@pytest.fixture(params=city)
def city_name(request):
    print("城市名稱: %s"%request.param)
    return request.param


@allure.epic('測試天氣API接口'.center(30,'*'))
@allure.feature('測試模塊')
@allure.suite('這是套件')
class TestWeather:
    """測試模塊httpbin"""
    def setup(self):
        """全部用例執行前的條件"""
        self.conf = Config()
        self.data = Weather()
        self.test_assert = Assert.Assertions()
        self.request = Request.Request()
        self.results_list = Consts.RESULT_LIST
        self.logger = Log.MyLog()


    @allure.severity('normal')
    @allure.story('故事1:獲取天氣數據')
    @allure.title('獲取單個城市的天氣')
    @allure.description('獲取深圳的天氣')
    @allure.testcase('測試用例地址:www.***.com')
    @allure.issue('缺陷管理地址:https://www.zentao.net/')
    @allure.tag('這是tag')
    @pytest.mark.run(order=3)
    def test_001(self):
        """
        測試httpbin接口:get方法
        """
        # api:host
        host = self.conf.host_test
        req_url = 'https://' + host
        # api:url
        urls = self.data.url[0]
        # api:body
        params = self.data.data[0]
        # api:headers
        headers = self.data.header[0]
        print(host)
        print(req_url)
        print(urls)

        api_url = req_url + urls

        response = self.request.get_request(url=api_url,data=params,header=headers)
        self.test_assert.assert_code(response['code'],200)
        print(response['code'])
        self.results_list.append('True')
        print(self.results_list)
        print('接口返回數據SSSS: %s'%response)
        self.logger.info('接口返回數據: %s' % response)


    @allure.severity('normal')
    @allure.story('故事2:獲取天氣數據')
    @allure.title('獲取不一樣城市的天氣')
    @allure.description('獲取北上廣深城市的天氣')
    @allure.testcase('測試用例地址:www.***.com')
    @allure.issue('缺陷管理地址:https://www.zentao.net/')
    @pytest.mark.parametrize('city_name',city,indirect=True)
    @pytest.mark.run(order=2)
    def test_002(self,city_name):
        # step_1()
        host = 'wthrcdn.etouch.cn'
        req_url = 'http://' + host
        urls = self.data.url[1]
        params = {'city':city_name}
        headers = self.data.header[1]

        api_url = req_url + urls

        response = self.request.get_request(url=api_url,data=params,header=headers)
        self.test_assert.assert_code(response['code'],200)
        print('接口返回數據: %s'%response)
        self.logger.info('接口返回數據: %s'%response)
        self.results_list.append('True')
        print(self.results_list)

  核心主程序代碼

if __name__ == '__main__':
    conf = Configs.Config()
    log = Log.MyLog()
    log.info('初始化配置文件, path=' + conf.conf_path)

    shell = Shell.Shell()
  
    #exp: 異地啓動報告
    cmd2 = 'pytest -s -q  --alluredir  allure_report --clean-alluredir'
    cmd3 = 'allure serve allure_report'
    
        try:
            os.chdir(r"./testcase")  # 跳到報告路徑下
            print(os.getcwd())
            shell.invoke(cmd2)
            shell.invoke_2(cmd3)
            # log.info(shell.invoke_2(cmd3))
        except Exception:
            log.error('異地啓動失敗,請檢查環境配置')
            raise
        else:
            log.info("沒有執行")

  運行結果

[2020-06-07 23:04:11] [INFO] [INFO 2020-06-07 23:04:11]初始化配置文件, path=C:\Users\Administrator\Desktop\pytest_testAPI\config\config.ini

城市名稱: 北京
接口返回數據: {'code': 200, 'body': {'data': {'yesterday': {'date': '6日星期六', 'high': '高溫 28℃', 'fx': '東南風', 'low': '低溫 18℃', 'fl': '<![CDATA[2級]]>', 'type': '晴'}, 'city': '北京', 'forecast': [{'date': '7日星期天', 'high': '高溫 36℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 20℃', 'fengxiang': '南風', 'type': '多雲'}, {'date': '8日星期一', 'high': '高溫 38℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 26℃', 'fengxiang': '西南風', 'type': '陰'}, {'date': '9日星期二', 'high': '高溫 30℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 21℃', 'fengxiang': '東北風', 'type': '陰'}, {'date': '10日星期三', 'high': '高溫 34℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 21℃', 'fengxiang': '東南風', 'type': '晴'}, {'date': '11日星期四', 'high': '高溫 34℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 22℃', 'fengxiang': '東南風', 'type': '小雨'}], 'ganmao': '感冒易發期,外出請適當調整衣物,注意補充水分。', 'wendu': '31'}, 'status': 1000, 'desc': 'OK'}, 'text': '{"data":{"yesterday":{"date":"6日星期六","high":"高溫 28℃","fx":"東南風","low":"低溫 18℃","fl":"<![CDATA[2級]]>","type":"晴"},"city":"北京","forecast":[{"date":"7日星期天","high":"高溫 36℃","fengli":"<![CDATA[2級]]>","low":"低溫 20℃","fengxiang":"南風","type":"多雲"},{"date":"8日星期一","high":"高溫 38℃","fengli":"<![CDATA[3級]]>","low":"低溫 26℃","fengxiang":"西南風","type":"陰"},{"date":"9日星期二","high":"高溫 30℃","fengli":"<![CDATA[2級]]>","low":"低溫 21℃","fengxiang":"東北風","type":"陰"},{"date":"10日星期三","high":"高溫 34℃","fengli":"<![CDATA[2級]]>","low":"低溫 21℃","fengxiang":"東南風","type":"晴"},{"date":"11日星期四","high":"高溫 34℃","fengli":"<![CDATA[2級]]>","low":"低溫 22℃","fengxiang":"東南風","type":"小雨"}],"ganmao":"感冒易發期,外出請適當調整衣物,注意補充水分。","wendu":"31"},"status":1000,"desc":"OK"}', 'time_consuming': 65.801, 'time_total': 0.065801}
['True']
.城市名稱: 上海
接口返回數據: {'code': 200, 'body': {'data': {'yesterday': {'date': '6日星期六', 'high': '高溫 27℃', 'fx': '東北風', 'low': '低溫 21℃', 'fl': '<![CDATA[3級]]>', 'type': '多雲'}, 'city': '上海', 'forecast': [{'date': '7日星期天', 'high': '高溫 28℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 22℃', 'fengxiang': '東南風', 'type': '陰'}, {'date': '8日星期一', 'high': '高溫 29℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 23℃', 'fengxiang': '東南風', 'type': '晴'}, {'date': '9日星期二', 'high': '高溫 27℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 24℃', 'fengxiang': '東南風', 'type': '陰'}, {'date': '10日星期三', 'high': '高溫 27℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 23℃', 'fengxiang': '東南風', 'type': '大雨'}, {'date': '11日星期四', 'high': '高溫 29℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 24℃', 'fengxiang': '東風', 'type': '多雲'}], 'ganmao': '感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。', 'wendu': '23'}, 'status': 1000, 'desc': 'OK'}, 'text': '{"data":{"yesterday":{"date":"6日星期六","high":"高溫 27℃","fx":"東北風","low":"低溫 21℃","fl":"<![CDATA[3級]]>","type":"多雲"},"city":"上海","forecast":[{"date":"7日星期天","high":"高溫 28℃","fengli":"<![CDATA[3級]]>","low":"低溫 22℃","fengxiang":"東南風","type":"陰"},{"date":"8日星期一","high":"高溫 29℃","fengli":"<![CDATA[3級]]>","low":"低溫 23℃","fengxiang":"東南風","type":"晴"},{"date":"9日星期二","high":"高溫 27℃","fengli":"<![CDATA[3級]]>","low":"低溫 24℃","fengxiang":"東南風","type":"陰"},{"date":"10日星期三","high":"高溫 27℃","fengli":"<![CDATA[2級]]>","low":"低溫 23℃","fengxiang":"東南風","type":"大雨"},{"date":"11日星期四","high":"高溫 29℃","fengli":"<![CDATA[2級]]>","low":"低溫 24℃","fengxiang":"東風","type":"多雲"}],"ganmao":"感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。","wendu":"23"},"status":1000,"desc":"OK"}', 'time_consuming': 16.963, 'time_total': 0.016963}
['True', 'True']
.城市名稱: 廣州
接口返回數據: {'code': 200, 'body': {'data': {'yesterday': {'date': '6日星期六', 'high': '高溫 29℃', 'fx': '西南風', 'low': '低溫 24℃', 'fl': '<![CDATA[3級]]>', 'type': '小雨'}, 'city': '廣州', 'forecast': [{'date': '7日星期天', 'high': '高溫 28℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 26℃', 'fengxiang': '東南風', 'type': '大雨'}, {'date': '8日星期一', 'high': '高溫 29℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 26℃', 'fengxiang': '東南風', 'type': '陰'}, {'date': '9日星期二', 'high': '高溫 31℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 26℃', 'fengxiang': '南風', 'type': '大雨'}, {'date': '10日星期三', 'high': '高溫 32℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 26℃', 'fengxiang': '東南風', 'type': '小雨'}, {'date': '11日星期四', 'high': '高溫 32℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 26℃', 'fengxiang': '南風', 'type': '小雨'}], 'ganmao': '感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。', 'wendu': '26'}, 'status': 1000, 'desc': 'OK'}, 'text': '{"data":{"yesterday":{"date":"6日星期六","high":"高溫 29℃","fx":"西南風","low":"低溫 24℃","fl":"<![CDATA[3級]]>","type":"小雨"},"city":"廣州","forecast":[{"date":"7日星期天","high":"高溫 28℃","fengli":"<![CDATA[2級]]>","low":"低溫 26℃","fengxiang":"東南風","type":"大雨"},{"date":"8日星期一","high":"高溫 29℃","fengli":"<![CDATA[3級]]>","low":"低溫 26℃","fengxiang":"東南風","type":"陰"},{"date":"9日星期二","high":"高溫 31℃","fengli":"<![CDATA[3級]]>","low":"低溫 26℃","fengxiang":"南風","type":"大雨"},{"date":"10日星期三","high":"高溫 32℃","fengli":"<![CDATA[3級]]>","low":"低溫 26℃","fengxiang":"東南風","type":"小雨"},{"date":"11日星期四","high":"高溫 32℃","fengli":"<![CDATA[3級]]>","low":"低溫 26℃","fengxiang":"南風","type":"小雨"}],"ganmao":"感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。","wendu":"26"},"status":1000,"desc":"OK"}', 'time_consuming': 16.062, 'time_total': 0.016062}
['True', 'True', 'True']
.城市名稱: 深圳
接口返回數據: {'code': 200, 'body': {'data': {'yesterday': {'date': '6日星期六', 'high': '高溫 30℃', 'fx': '南風', 'low': '低溫 26℃', 'fl': '<![CDATA[3級]]>', 'type': '中雨'}, 'city': '深圳', 'forecast': [{'date': '7日星期天', 'high': '高溫 28℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 25℃', 'fengxiang': '南風', 'type': '中雨'}, {'date': '8日星期一', 'high': '高溫 28℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 25℃', 'fengxiang': '東南風', 'type': '陰'}, {'date': '9日星期二', 'high': '高溫 30℃', 'fengli': '<![CDATA[3級]]>', 'low': '低溫 25℃', 'fengxiang': '東南風', 'type': '大雨'}, {'date': '10日星期三', 'high': '高溫 31℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 28℃', 'fengxiang': '東南風', 'type': '小雨'}, {'date': '11日星期四', 'high': '高溫 32℃', 'fengli': '<![CDATA[2級]]>', 'low': '低溫 27℃', 'fengxiang': '東南風', 'type': '多雲'}], 'ganmao': '感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。', 'wendu': '26'}, 'status': 1000, 'desc': 'OK'}, 'text': '{"data":{"yesterday":{"date":"6日星期六","high":"高溫 30℃","fx":"南風","low":"低溫 26℃","fl":"<![CDATA[3級]]>","type":"中雨"},"city":"深圳","forecast":[{"date":"7日星期天","high":"高溫 28℃","fengli":"<![CDATA[3級]]>","low":"低溫 25℃","fengxiang":"南風","type":"中雨"},{"date":"8日星期一","high":"高溫 28℃","fengli":"<![CDATA[3級]]>","low":"低溫 25℃","fengxiang":"東南風","type":"陰"},{"date":"9日星期二","high":"高溫 30℃","fengli":"<![CDATA[3級]]>","low":"低溫 25℃","fengxiang":"東南風","type":"大雨"},{"date":"10日星期三","high":"高溫 31℃","fengli":"<![CDATA[2級]]>","low":"低溫 28℃","fengxiang":"東南風","type":"小雨"},{"date":"11日星期四","high":"高溫 32℃","fengli":"<![CDATA[2級]]>","low":"低溫 27℃","fengxiang":"東南風","type":"多雲"}],"ganmao":"感冒低發期,天氣溫馨,請注意多吃蔬菜水果,多喝水哦。","wendu":"26"},"status":1000,"desc":"OK"}', 'time_consuming': 18.194, 'time_total': 0.018194}
['True', 'True', 'True', 'True']
.tianqiapi.com
https://tianqiapi.com
/api
200
['True', 'True', 'True', 'True', 'True']
接口返回數據SSSS: {'code': 200, 'body': {'cityid': '101280601', 'date': '2020-06-07', 'week': '星期日', 'update_time': '2020-06-07 22:45:12', 'city': '深圳', 'cityEn': 'shenzhen', 'country': '中國', 'countryEn': 'China', 'wea': '雨', 'wea_img': 'yu', 'tem': '26', 'tem1': '27', 'tem2': '25', 'win': '東南風 ', 'win_speed': '1級', 'win_meter': '小於12km/h', 'humidity': '96%', 'visibility': '17.6km', 'pressure': '999', 'air': '25', 'air_pm25': '25', 'air_level': '優', 'air_tips': '空氣很好,能夠外出活動,呼吸新鮮空氣,擁抱大天然!', 'alarm': {'alarm_type': '', 'alarm_level': '', 'alarm_content': ''}}, 'text': '{"cityid":"101280601","date":"2020-06-07","week":"\\u661f\\u671f\\u65e5","update_time":"2020-06-07 22:45:12","city":"\\u6df1\\u5733","cityEn":"shenzhen","country":"\\u4e2d\\u56fd","countryEn":"China","wea":"\\u96e8","wea_img":"yu","tem":"26","tem1":"27","tem2":"25","win":"\\u4e1c\\u5357\\u98ce ","win_speed":"1\\u7ea7","win_meter":"\\u5c0f\\u4e8e12km\\/h","humidity":"96%","visibility":"17.6km","pressure":"999","air":"25","air_pm25":"25","air_level":"\\u4f18","air_tips":"\\u7a7a\\u6c14\\u5f88\\u597d\\uff0c\\u53ef\\u4ee5\\u5916\\u51fa\\u6d3b\\u52a8\\uff0c\\u547c\\u5438\\u65b0\\u9c9c\\u7a7a\\u6c14\\uff0c\\u62e5\\u62b1\\u5927\\u81ea\\u7136\\uff01","alarm":{"alarm_type":"","alarm_level":"","alarm_content":""}}', 'time_consuming': 338.721, 'time_total': 1.338721}
.
5 passed in 1.79s

Generating report to temp directory...
Report successfully generated to C:\Users\ADMINI~1\AppData\Local\Temp\8814248789759504727\allure-report
Starting web server...
Server started at <http://192.168.1.105:63005/>. Press <Ctrl+C> to exit

 

  測試報告

相關文章
相關標籤/搜索