Ghi chú Các ví dụ trong việc sử dụng cú pháp này vì tạo phản hồi là một chức năng của bộ điều hợp chứ không phải là người chế giễu. Tất cả các đối số giống nhau có thể được cung cấp cho người chế giễu nếu đó là cách bạn sử dụng requests_mock trong dự án của mình và sử dụng hình thức thay cho đã cho: Nếu bạn không quen thuộc với các yêu cầu Bộ điều hợp (xem sử dụng bộ điều hợp), hãy thích cách tiếp cận giả (xem sử dụng bộ chế giễu).Adapter Usage), prefer the mocker approach (see Using the Mocker). Đăng ký phản hồi JoCác phản hồi được đăng ký với hàm >>> adapter.register_uri('GET', 'mock://test.com', text='Success') >>> resp = session.get('mock://test.com') >>> resp.text 'Success'0 trên bộ điều hợp. >>> adapter.register_uri('GET', 'mock://test.com', text='Success') >>> resp = session.get('mock://test.com') >>> resp.text 'Success' >>> adapter.register_uri('GET', 'mock://test.com', text='Success') >>> resp = session.get('mock://test.com') >>> resp.text 'Success'1 lấy phương thức HTTP, URI và sau đó thông tin được sử dụng để xây dựng phản hồi. Thông tin này bao gồm:
Để chỉ định phần thân của phản hồi, có một số tùy chọn phụ thuộc vào định dạng mà bạn muốn trả về.
Các tùy chọn này được đặt tên trùng với các tham số trên đối tượng >>> adapter.register_uri('GET', 'mock://test.com', text='Success') >>> resp = session.get('mock://test.com') >>> resp.text 'Success'3. Ví dụ: >>> adapter.register_uri('GET', 'mock://test.com/1', json={'a': 'b'}, status_code=200) >>> resp = session.get('mock://test.com/1') >>> resp.json() {'a': 'b'} >>> adapter.register_uri('GET', 'mock://test.com/2', text='Not Found', status_code=404) >>> resp = session.get('mock://test.com/2') >>> resp.text 'Not Found' >>> resp.status_code 404 Nó chỉ có ý nghĩa để cung cấp nhiều nhất một yếu tố cơ thể cho mỗi phản ứng. Phản hồi độngMột cuộc gọi lại có thể được cung cấp thay cho bất kỳ yếu tố cơ thể nào. Các cuộc gọi lại phải là một hàm dưới dạng def callback(request, context): và trả về một giá trị phù hợp với phần tử cơ thể đã được chỉ định. Các yếu tố được cung cấp là:
Các thuộc tính có sẵn trên ngữ cảnh là:
Các tham số này được điền ban đầu từ các biến được cung cấp cho hàm >>> adapter.register_uri('GET', 'mock://test.com', text='Success') >>> resp = session.get('mock://test.com') >>> resp.text 'Success'1 và nếu chúng được sửa đổi trên đối tượng ngữ cảnh thì những thay đổi đó sẽ được phản ánh trong phản hồi. >>> def text_callback(request, context): ... context.status_code = 200 ... context.headers['Test1'] = 'value1' ... return 'response' ... >>> adapter.register_uri('GET', ... 'mock://test.com/3', ... text=text_callback, ... headers={'Test2': 'value2'}, ... status_code=400) >>> resp = session.get('mock://test.com/3') >>> resp.status_code, resp.headers, resp.text (200, {'Test1': 'value1', 'Test2': 'value2'}, 'response') Danh sách trả lờiNhiều câu trả lời có thể được cung cấp để được trả về theo thứ tự bằng cách chỉ định các tham số từ khóa trong danh sách. Nếu danh sách đã cạn kiệt thì phản hồi cuối cùng sẽ tiếp tục được trả lại. >>> adapter.register_uri('GET', 'mock://test.com/4', [{'text': 'resp1', 'status_code': 300}, ... {'text': 'resp2', 'status_code': 200}]) >>> resp = session.get('mock://test.com/4') >>> (resp.status_code, resp.text) (300, 'resp1') >>> resp = session.get('mock://test.com/4') >>> (resp.status_code, resp.text) (200, 'resp2') >>> resp = session.get('mock://test.com/4') >>> (resp.status_code, resp.text) (200, 'resp2') Các cuộc gọi lại hoạt động trong danh sách phản hồi theo cách chính xác theo cách họ làm bình thường; >>> adapter.register_uri('GET', 'mock://test.com/5', [{'text': text_callback}]), >>> resp = session.get('mock://test.com/5') >>> resp.status_code, resp.headers, resp.text (200, {'Test1': 'value1', 'Test2': 'value2'}, 'response') Tăng ngoại lệKhi cố gắng mô phỏng thời gian chờ kết nối hoặc SSLError, bạn cần có khả năng ném một ngoại lệ khi bị bắt. Điều này có thể đạt được bằng cách truyền tham số EXC thay vì tham số cơ thể. >>> adapter.register_uri('GET', 'mock://test.com/6', exc=requests.exceptions.ConnectTimeout), >>> session.get('mock://test.com/6') Traceback (most recent call last): ... ConnectTimeout: Xử lý cookie côngTrong khi cookie chỉ là các tiêu đề mà chúng được đối xử theo một cách khác, cả trong HTTP và thư viện yêu cầu. Để làm việc chặt chẽ với thư viện yêu cầu càng tốt, có hai cách để cung cấp cookie cho các phản hồi yêu cầu_mock. Phương pháp đơn giản nhất là sử dụng giao diện từ điển. Khóa và giá trị của từ điển được biến trực tiếp thành tên và giá trị của cookie. Phương pháp này không cho phép bạn đặt bất kỳ tham số cookie nâng cao nào hơn như hết hạn hoặc miền. >>> adapter.register_uri('GET', 'mock://test.com/7', cookies={'foo': 'bar'}), >>> resp = session.get('mock://test.com/7') >>> resp.cookies['foo'] 'bar' Cách tiên tiến hơn là xây dựng và điền vào một cái lọ cookie mà bạn có thể thêm cookie và chuyển nó cho người chế giễu. >>> jar = requests_mock.CookieJar() >>> jar.set('foo', 'bar', domain='.test.com', path='/baz') >>> adapter.register_uri('GET', 'mock://test.com/8', cookies=jar), >>> resp = session.get('mock://test.com/8') >>> resp.cookies['foo'] 'bar' >>> resp.cookies.list_paths() ['/baz'] |