search
HomeBackend DevelopmentPHP Tutorial(PHP) Use Behat and Mink to do BDD (behavioral test-driven development) for web applications_PHP tutorial


First of all, according to my own understanding, what is the difference between TDD and BDD?

The first is the difference in thinking. Traditional TDD focuses on whether the interface is correctly implemented, so each interface usually has a corresponding unit test class. BDD uses story templates and scenarios to describe the specific functional performance of the product when users operate it, which is somewhat similar to the traditional Use Case. Writing BDD tests is more like test cases that testers usually write. Since BDD is generally expressed in natural language, even non-developers can understand it. The following is an example of BDD:



Behat is a BDD framework under PHP and can be used with PHPUnit.
For a more detailed introduction, you can check out behat’s official website, http://behat.org/

When doing automated testing of web applications, you will encounter some troubles when encountering interface testing, whether using TDD or BDD.
There are usually two solutions:
1. Bypass GUI testing. Since most web development uses the MVC framework, according to the principles of MVC, the Controller only needs to pass the correct data to the View to complete the task. Therefore, when doing testing, we only need to verify whether the Controller passes the correct data to the specified View. As for whether the View can display the data correctly, it depends on the integration test to verify.
2. Use some GUI testing framework or browser emulator. Today I’m going to talk about using a browser emulator.
Browser simulators can be roughly divided into two types:
• Headless browser emulators - browser emulators, that can be executed fully without GUI through console. Such emulators can do HTTP request and emulate browser applications on high level (HTTP stack), but on lower level (JS, CSS) they are totally limited. But they are much faster than real browsers, cuz you don't need to parse CSS or execute JS in order to open pages or click links with them.
• Simply put, this emulator is faster than a real browser, but it cannot handle CSS or JS.
• In-browser emulators - this emulators works with real browsers, taking full control of them and using them as zombies for their testing needs. This way, you'll have standart fully-configured real browser, which you will be able to control. CSS styling, JS and AJAX execution - all supported out of the box.
• This simulator is closer to a real browser and can handle CSS and JS, but the speed will be relatively slower than the first one.
But in fact, when actually doing testing, both simulators are generally needed. Because you can't use the in-browser simulator for all tests, because when there are many tests, the speed will be unbearable. But when you need to test similar Ajax requests, you cannot use the Headless simulator and must use the In-browser simulator.

Since the two simulators are very different and each has a different API, it is very troublesome to use two sets of APIs for testing at the same time.
At this time, the advantages of MINK come out. MINK is a browser simulator abstraction layer that supports both in-browser and headless simulators with the same set of APIs.

The following will introduce how to use Behat and MINK to do BDD for WEB applications.
1. Install Behat
$ pear channel-discover pear.symfony.com
$ pear channel-discover pear.behat.org
$ pear install behat/behat
2. Install MINK
$ pear channel-discover pear.behat.org
$ pear install behat/mink-beta
3. Create a new sosobaike directory, enter the sosozhidao directory, and execute the behat --init command
$ mkdir sosobaike
$ cd sosobaike
$ behat --init
At this time behat will help you create a features directory and features/bootstrap/FeatureContext.php file
FeatureContext.php is where the actual methods for unit testing are stored

4. Create features/search.feature file




But if we do not use MINK and run the behat command directly, behat will recommend that you add some test methods to features/boostrap/FeatureContext.php. You need to use scripts like Selenium to perform these test methods yourself. assertion.



5. But if you use MINK, things are much simpler, just modify the features/bootstrap/FeatureContext.php file,

Add two lines of code.

a) require_once 'mink/autoload.php';

b) Change the parent class of FeatureContext from BehatContext to BehatMinkBehatContextMinkContext

6. Execute the behat -dl command. If everything is normal, you will see results similar to the following



The above are actually some APIs supported by MINK.

7. Execute the command behat features/search.feature, you will see the following results




At this point, even if a BDD test is completed, the whole process is very simple and does not take longer than writing a test case. It also has a function that the test case does not have - it can automatically execute the verification function.

Therefore, I personally think that students doing testing can try to use this method instead of test cases, which can save a lot of time.

For development students, I personally think that when doing BDD or TDD for web applications, you should use a solution that bypasses GUI testing, that is, a solution that only tests the Controller.

The reasons are as follows:

1. Developers and testers have different requirements for test running speed. Testers do not have high requirements for test running speed. They can start the test, then do other things, and come back later. Just look at the results. But developers are different. Every time they modify a code, they need to run a complete test to ensure that their modifications do not destroy other functions. If running a complete test takes time, then some developers will want to do unit testing. Although using MINK is faster than accessing it in a real browser, since you are always accessing the real product code, many tests will access the database. Once there are many tests, it will be very time-consuming to run all the tests.

2. Since using MINK will access the real product code, it means that you need to configure related environments (dependent libraries, databases, etc.), and even need to restore the database to its initial state. As long as there is an error in any configuration link, it may cause the unit test that originally passed to fail. This fails to meet the standards of a good unit test. Good unit tests must ensure consistent results whenever they are run. To achieve this effect, you cannot rely on external conditions (for example: database, network). These external conditions should be simulated as much as possible using code.


Excerpted from NEE's Blog

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/478296.htmlTechArticleFirst of all, according to my own understanding, what is the difference between TDD and BDD? The first is the difference in thinking. Traditional TDD focuses on whether the interface is implemented correctly, so usually each...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),