From fdfc5e84e291f50dcc6730c7fb70555897fdde0f Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 1 Oct 2019 15:46:10 +0800 Subject: [PATCH 1/4] doc: display downloads data on project homepage --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c0e0401..f612c778 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ + # HttpRunner -[![LICENSE](https://img.shields.io/github/license/HttpRunner/HttpRunner.svg)](https://github.com/HttpRunner/HttpRunner/blob/master/LICENSE) [![travis-ci](https://travis-ci.org/HttpRunner/HttpRunner.svg?branch=master)](https://travis-ci.org/HttpRunner/HttpRunner) [![coveralls](https://coveralls.io/repos/github/HttpRunner/HttpRunner/badge.svg?branch=master)](https://coveralls.io/github/HttpRunner/HttpRunner?branch=master) [![pypi version](https://img.shields.io/pypi/v/HttpRunner.svg)](https://pypi.python.org/pypi/HttpRunner) [![pyversions](https://img.shields.io/pypi/pyversions/HttpRunner.svg)](https://pypi.python.org/pypi/HttpRunner) +[![downloads](https://pepy.tech/badge/httprunner)](https://pepy.tech/project/httprunner) +[![travis-ci](https://travis-ci.org/httprunner/httprunner.svg?branch=master)](https://travis-ci.org/httprunner/httprunner) +[![coveralls](https://coveralls.io/repos/github/HttpRunner/HttpRunner/badge.svg?branch=master)](https://coveralls.io/github/HttpRunner/HttpRunner?branch=master) +[![pypi version](https://img.shields.io/pypi/v/httprunner.svg)](https://pypi.python.org/pypi/httprunner) +[![pyversions](https://img.shields.io/pypi/pyversions/httprunner.svg)](https://pypi.python.org/pypi/httprunner) HttpRunner is an HTTP(S) protocol-oriented universal testing framework. Write testing scripts in `YAML/JSON` once, you can then achieve automated testing, performance testing, online monitoring, continuous integration and other testing needs. From 00abfb81dd79e07085168fbac680c30960f2b3fc Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 1 Oct 2019 15:54:57 +0800 Subject: [PATCH 2/4] doc: add TTF shield --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f612c778..c98d501a 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![coveralls](https://coveralls.io/repos/github/HttpRunner/HttpRunner/badge.svg?branch=master)](https://coveralls.io/github/HttpRunner/HttpRunner?branch=master) [![pypi version](https://img.shields.io/pypi/v/httprunner.svg)](https://pypi.python.org/pypi/httprunner) [![pyversions](https://img.shields.io/pypi/pyversions/httprunner.svg)](https://pypi.python.org/pypi/httprunner) +[![TesterHome](https://img.shields.io/badge/TTF-TesterHome-2955C5.svg)](https://testerhome.com/opensource_projects/httprunner) HttpRunner is an HTTP(S) protocol-oriented universal testing framework. Write testing scripts in `YAML/JSON` once, you can then achieve automated testing, performance testing, online monitoring, continuous integration and other testing needs. From 90208030296399f02345b65d92d9002723b9debb Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 1 Oct 2019 16:01:39 +0800 Subject: [PATCH 3/4] change: link TTF badge to testerhome github_statistics --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c98d501a..a205fae7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![coveralls](https://coveralls.io/repos/github/HttpRunner/HttpRunner/badge.svg?branch=master)](https://coveralls.io/github/HttpRunner/HttpRunner?branch=master) [![pypi version](https://img.shields.io/pypi/v/httprunner.svg)](https://pypi.python.org/pypi/httprunner) [![pyversions](https://img.shields.io/pypi/pyversions/httprunner.svg)](https://pypi.python.org/pypi/httprunner) -[![TesterHome](https://img.shields.io/badge/TTF-TesterHome-2955C5.svg)](https://testerhome.com/opensource_projects/httprunner) +[![TesterHome](https://img.shields.io/badge/TTF-TesterHome-2955C5.svg)](https://testerhome.com/github_statistics) HttpRunner is an HTTP(S) protocol-oriented universal testing framework. Write testing scripts in `YAML/JSON` once, you can then achieve automated testing, performance testing, online monitoring, continuous integration and other testing needs. From a1729f3d254e57d63fd28245ef24c770a51f39a2 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Tue, 1 Oct 2019 16:53:48 +0800 Subject: [PATCH 4/4] doc: update README --- README.md | 27 ++++++++++----------------- httprunner/templates/qrcode.jpg | Bin 0 -> 8706 bytes 2 files changed, 10 insertions(+), 17 deletions(-) create mode 100644 httprunner/templates/qrcode.jpg diff --git a/README.md b/README.md index a205fae7..c932b118 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,11 @@ [![pyversions](https://img.shields.io/pypi/pyversions/httprunner.svg)](https://pypi.python.org/pypi/httprunner) [![TesterHome](https://img.shields.io/badge/TTF-TesterHome-2955C5.svg)](https://testerhome.com/github_statistics) -HttpRunner is an HTTP(S) protocol-oriented universal testing framework. Write testing scripts in `YAML/JSON` once, you can then achieve automated testing, performance testing, online monitoring, continuous integration and other testing needs. - -Formerly known as `ApiTestEngine`. +*HttpRunner* is a simple & elegant, yet powerful HTTP(S) testing framework. Enjoy! ✨ 🚀 ✨ ## Design Philosophy -- Take full reuse of Python's existing powerful libraries: [`Requests`][Requests], [`unittest`][unittest] and [`Locust`][Locust]. +- Embrace open source, stand on giants' shoulders, like [`Requests`][Requests], [`unittest`][unittest] and [`Locust`][Locust]. - Convention over configuration. - Pursuit of high rewards, write once and achieve a variety of testing needs @@ -23,9 +21,9 @@ Formerly known as `ApiTestEngine`. - Inherit all powerful features of [`Requests`][Requests], just have fun to handle HTTP(S) in human way. - Define testcases in YAML or JSON format in concise and elegant manner. - Record and generate testcases with [`HAR`][HAR] support. see [`har2case`][har2case]. -- Supports `function`/`variable`/`extract`/`validate` mechanisms to create full test scenarios. +- Supports `variables`/`extract`/`validate` mechanisms to create full test scenarios. - Supports perfect hook mechanism. -- With `debugtalk.py` plugin, module functions can be auto-discovered in recursive upward directories. +- With `debugtalk.py` plugin, very easy to implement complex logic in testcase. - Testcases can be run in diverse ways, with single testcase, multiple testcases, or entire project folder. - Test report is concise and clear, with detailed log records. - With reuse of [`Locust`][Locust], you can run performance test without extra work. @@ -35,33 +33,28 @@ Formerly known as `ApiTestEngine`. HttpRunner is rich documented. -- [`User documentation in English (outdated)`][user-docs-en] - [`中文用户使用手册`][user-docs-zh] - [`开发历程记录博客`][development-blogs] ## How to Contribute -1. Check for [open issues](https://github.com/HttpRunner/HttpRunner/issues) or [open a fresh issue](https://github.com/HttpRunner/HttpRunner/issues/new/choose) to start a discussion around a feature idea or a bug. +1. Check for [open issues](https://github.com/httprunner/httprunner/issues) or [open a fresh issue](https://github.com/httprunner/httprunner/issues/new/choose) to start a discussion around a feature idea or a bug. 2. Fork [the repository](https://github.com/httprunner/httprunner) on GitHub to start making your changes to the **master** branch (or branch off of it). You also need to comply with the [development rules](https://github.com/httprunner/docs/blob/master/en/docs/dev-rules.md). 3. Write a test which shows that the bug was fixed or that the feature works as expected. -4. Send a pull request, you will then become a [contributor](https://github.com/HttpRunner/HttpRunner/graphs/contributors) after it gets merged and published. +4. Send a pull request, you will then become a [contributor](https://github.com/httprunner/httprunner/graphs/contributors) after it gets merged and published. ## Subscribe 关注 HttpRunner 的微信公众号,第一时间获得最新资讯。 -![][qrcode_for_httprunner] +![](httprunner/templates/qrcode.jpg) [Requests]: http://docs.python-requests.org/en/master/ [unittest]: https://docs.python.org/3/library/unittest.html [Locust]: http://locust.io/ -[PyUnitReport]: https://github.com/HttpRunner/PyUnitReport -[Jenkins]: https://jenkins.io/index.html -[har2case]: https://github.com/HttpRunner/har2case -[user-docs-en]: http://httprunner.org/ +[har2case]: https://github.com/httprunner/har2case [user-docs-zh]: http://cn.httprunner.org/ -[development-blogs]: http://debugtalk.com/tags/HttpRunner/ +[development-blogs]: http://debugtalk.com/tags/httprunner/ [HAR]: http://httparchive.org/ [Swagger]: https://swagger.io/ -[Postman Collection Format]: http://blog.getpostman.com/2015/06/05/travelogue-of-postman-collection-format-v2/ -[qrcode_for_httprunner]: https://raw.githubusercontent.com/HttpRunner/HttpRunner/master/docs/images/qrcode_for_httprunner.jpg + diff --git a/httprunner/templates/qrcode.jpg b/httprunner/templates/qrcode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..386a237d675e9ad5bde188a1d9b991de7cabcda9 GIT binary patch literal 8706 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 !^* zxFdvnOGxPueNF_!*ltYn(WFC&i!3Vsby#t2%{IGReS~v1v3|4K{k9rs7PpKNDMp64 z85r(l?@nd1M>VG`_|uOBsIxJBXx4&39n+lJF!x2%?2;~PT6ao%smnwdyC;SANt13m z%bzbmq@SGLtgzuif}F~wPHi-G4fpgEpiis7!XBf)r0{RnJpMJcBD%j2H`PIFyKg~? z<5oS9)9Ql>u=3WpY1p%Ji!s@|0`!Cm6JWjoeR)lLWeBGb^Os@TaDgOSFqKLBY&Asd zo_ogIc&6E7ZU;$USu<*q8$d{+iGK=iwMiXw~v?dNQ33%{% zR0@AHt}NSEO9^A}Qs=Vdw!eV$FjAwLAc@jyrfS_$HBiP3YZM&7ocTv-S12&kLINVb?5 zmDNHTOHUi9^@u+)r{G$k6UtIe4TkFAr>Y_W^QhbN3mDI;WQb=-R5L}nei~b0DzODI zMhb}1|nDuaJn5aKa4}*EHD(p|maI4s;tsTqM@asY2|$&5^~vzz+o|p$5yc3~g+? z#7X14akz}WwE;}mARSQ5@CO-Vz+xttQW(yFPR)7c+m47M;tV50I7(oDzyz|_bmG;MrOLfsq-+pA)Di1+QCk~cNE)h z(KjOPl85xA#j*#!L3Okt3))?qJd(UM8D->=m^(%(NRhV*pK?H=XDnN2&`RhTMw?Ga zV5nOmW5n(KPJSOA0jPKhnKmJHe(jORNKt%Tb~qR#9Nq|c04`&0zbRvJED+Ob;U43* z895Um$%~H$&>crsvATEtY+$(qBg1oge;~sh$GNvX#+@)&VYbC*EjBhP7ZP{ag2P|P zm3O|`eMp+72k{QHKMh;toDYeafGbz}#sZRLV5`ISF<>oQKAwU?m?9S$WL!4gkxVoO z8HF2N6&U(!;XViOE706GnFN@3At{7p%R@j)2xC#zC(r1R$q$5RMn2L z{tisef4q)^gcS|De&6>Au;2eMPp;my2h799Mqo?^vL}~g+2cB94?cDY+Y}LILqH^! zs4f7BS=qLwB*IsZ*3V8pUB4-vj? z2Vvwn3zOpz`b#6o1Idc`1ZH4wp8a@ zuzQR~I3>`p8sm$<@38@w4^*HS0K&-%txkInoHk@cfJb3C#&pp1fS^vFBfl-ekvJD( zRtJ)|aEDVW9vE?W1%_R^bRmx6MaJn{k_w}v>k&zT}*i@PE7C#?1(LTLnbf9y=YQ#1b?erpKc{vXS)CD8x? literal 0 HcmV?d00001