- {{ page.title }}
-
-
- {{ content }}
-
-
-
- Written on {{ page.date | date: "%B %e, %Y" }}
-
-
- {% include disqus.html %}
-
diff --git a/_plugins/posts-lastmod-hook.rb b/_plugins/posts-lastmod-hook.rb
new file mode 100644
index 0000000000000..1fd6ecf9d5fb3
--- /dev/null
+++ b/_plugins/posts-lastmod-hook.rb
@@ -0,0 +1,14 @@
+#!/usr/bin/env ruby
+#
+# Check for changed posts
+
+Jekyll::Hooks.register :posts, :post_init do |post|
+
+ commit_num = `git rev-list --count HEAD "#{ post.path }"`
+
+ if commit_num.to_i > 1
+ lastmod_date = `git log -1 --pretty="%ad" --date=iso "#{ post.path }"`
+ post.data['last_modified_at'] = lastmod_date
+ end
+
+end
diff --git a/_posts/2014-3-3-Hello-World.md b/_posts/2014-3-3-Hello-World.md
deleted file mode 100644
index d4665b6d18e9e..0000000000000
--- a/_posts/2014-3-3-Hello-World.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-layout: post
-title: You're up and running!
----
-
-Next you can update your site name, avatar and other options using the _config.yml file in the root of your repository (shown below).
-
-
-
-The easiest way to make your first post is to edit this one. Go into /_posts/ and update the Hello World markdown file. For more instructions head over to the [Jekyll Now repository](https://github.com/barryclark/jekyll-now) on GitHub.
\ No newline at end of file
diff --git a/_posts/2018-10-26-it-works-on-my-machine.md b/_posts/2018-10-26-it-works-on-my-machine.md
new file mode 100644
index 0000000000000..9929566d06eed
--- /dev/null
+++ b/_posts/2018-10-26-it-works-on-my-machine.md
@@ -0,0 +1,24 @@
+---
+title: It works on my machine
+date: '2018-10-26T00:00:00.000Z'
+categories:
+ - Testing
+redirect_from:
+ - /it-works-on-my-machine/
+---
+
+So, you just found this great bug and it's returned "cannot reproduce", or you have been told "it works on my machine", classic right?
+
+As a tester, in this situation, it can be easy to get defensive. Am I being told I am making it up? Am I being disrespected, why should I raise bugs if they are not important enough to fix?
+
+My suggestion, turn this on its head and consider this for a moment. Time to get technical! What details can be added to help identify the root cause of the issue? Can you do more investigation and help understand what is different between the environment you tested on, and the one the developer tried to reproduce it in?
+
+### Ways you could add value in response to "it works on may machine" in include:
+
+1. Identifying the exact build or deployment you observed the issue on, and check is this the same build the developer is checking against? Can you check the build they are using, maybe the issue is already fixed, but you haven't been given the latest code?
+2. Identify what platform are you both using. If it's web, make sure to check not only the Browser, but the version of that browser. If it's mobile, what version of Android or iOS is installed?
+3. Is there any additional logging you can get to help add context? If you can find an exception being thrown that is captured in a log, this can go a long way towards helping identify the issue.
+4. If you can continue to reproduce the issue, can you give the Developer access to your machine or environment? If your remote, can you setup a screen sharing session? At a minimum, it should be easy enough to capture a video of the steps. for this, I use Open Broadcast Software Studio ([https://obsproject.com/download](https://obsproject.com/download) "https://obsproject.com/download")), but many alternatives exist.
+5. If any of these have helped get to the root of the problem and get the bug fixes, try and use them more often in your usual bug reports, and see if you can reduce your "Works on my machine" count.
+
+I hope my thoughts on this are useful, I am really interested to know if you agree, disagree, or even better have additional hints and tips! if you do, please let me know on twitter: [https://twitter.com/fullsnacktester](https://twitter.com/fullsnacktester "https://twitter.com/fullsnacktester")
diff --git a/_posts/2018-11-15-selenium-ide-is-back-for-chrome-and-firefox.md b/_posts/2018-11-15-selenium-ide-is-back-for-chrome-and-firefox.md
new file mode 100644
index 0000000000000..7093433bb6a3b
--- /dev/null
+++ b/_posts/2018-11-15-selenium-ide-is-back-for-chrome-and-firefox.md
@@ -0,0 +1,44 @@
+---
+title: Selenium IDE is back for Chrome and Firefox!
+date: '2018-11-15 01:09'
+categories:
+ - Automation
+redirect_from:
+ - /selenium-ide-is-back-for-chrome-and-firefox/
+---
+
+Selenium's official IDE is back! with a "Record/Playback session overhaul". The old Selenium IDE Firefox plugin version from "back in the day", before it became unusable in 2017, with version 55 of Firefox ([https://seleniumhq.wordpress.com/2017/08/09/firefox-55-and-selenium-ide/](https://seleniumhq.wordpress.com/2017/08/09/firefox-55-and-selenium-ide/ "https://seleniumhq.wordpress.com/2017/08/09/firefox-55-and-selenium-ide/")).
+
+Selenium IDE "Next Generation", has current Chrome and Firefox plugins, that work with the latest versions of the browsers.
+
+
+
+### Does the new "Official" IDE offer any benefits?
+
+I really need to spend some more time with the IDE to do it justice. My initial reaction so far:
+
+* Debugging tests is pretty straightforward
+* The "If, else if, else and end" logic if very useful for creating basic conditional flow
+ * An example where this might be useful, is if you want to accept Cookie consent, but only if you haven't done so already
+* The saved tests appear to be stored in JSON, and so far I don't see an obvious way to convert them into something more useful you can continue "real" development with in a framework of your choice. So your stuck loading the tests back into SIDE or..
+* There is an Node/NPM Based "SIDE" test runner, I haven't had time to check this out yet but this is the suggested route for using SIDE tests in CI.
+
+### Should you care?
+
+First off, I didn't spend much time in the "old" IDE, and I've only had a very short look at the new. So I'm not yet very well placed to judge.
+
+What I do know, is that in the absence of the Official IDE, alternatives have been created. For example if you want a Chrome plugin for Capture and Playback, you may already be using Katalon Recorder ([https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid](https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid "https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid")).
+
+One of the nice things about Katalon Recorder, is that unlike SIDE, you can export into a number of useful formats. In fact you can match up Katalon Recorder and then convert these for using in SeleniumBase. [https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_ide](https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_ide "https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_ide"). This approach gives you flexibility to do capture and record, and then make more maintainable tests, using patterns such as the Page Object Model.
+
+### Give it ago, and make up your own mind
+
+**Release notes:**
+
+[https://github.com/SeleniumHQ/selenium-ide/releases/tag/v3.4.0](https://github.com/SeleniumHQ/selenium-ide/releases/tag/v3.4.0 "https://github.com/SeleniumHQ/selenium-ide/releases/tag/v3.4.0")
+
+**Download:**
+
+Chrome extension: [https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd](https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd "https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd")
+
+Firefox extension: [https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/](https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/ "https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/")
diff --git a/_posts/2019-02-10-Automated rest api testing with python.md b/_posts/2019-02-10-Automated rest api testing with python.md
new file mode 100644
index 0000000000000..1b6ef07753092
--- /dev/null
+++ b/_posts/2019-02-10-Automated rest api testing with python.md
@@ -0,0 +1,63 @@
+---
+title: Automated REST API Testing with Python
+date: '2019-02-19 00:00:00 +0000'
+categories:
+ - Automation
+tags:
+ - automation
+redirect_from:
+ - /Automated-rest-api-testing-with-python/
+---
+
+
+Last time out I introduced you to the start of my journey to automate all the "test" things in Python. I continue that journey now by switching focus away from frontend, to Restful Web APIs. You can look back at my last post [here](https://www.dowen.me.uk/posts/how-I-am-learning-to-test-the-internet-with-seleniumbase/ "How I am learning to test The Internet with SeleniumBase").
+
+## Explore, Request, Assert
+
+For this leg of the Journey, I will be using the python modules [requests](https://pypi.org/project/requests/ "Requests: HTTP for Humans") and [pyassert](https://pypi.org/project/pyassert/ "pyassert is an assertion library for the Python programming language.").
+
+## Exploring APIs
+
+
+
+Before you can make requests and you need to understand the API your testing. For this I recommend using a Rest Client. While you may already have mad skills in cURL, for the rest of us I suggest using [Postman](https://www.getpostman.com "Postman Simplifies API Development."), [Insomnia](https://insomnia.rest "Insomnia Debug APIs like a human, not a robot Finally, a REST client you'll love") or [SoapUI](https://www.soapui.org "SoapUI The Most Advanced REST & SOAP Testing Tool in the World").
+
+If, like me, you want to develop your API testing skills in a safe place, outside of any work projects, there are some great options!
+
+Ministry of Testing has a resource page listing some of those options [Websites To Practice Testing](https://www.ministryoftesting.com/dojo/lessons/websites-to-practice-testing "Here's a handy list of websites for software testers to practice their testing on that you might find it useful."). The one I am using is [Restful Booker](https://restful-booker.herokuapp.com "An API playground created by Mark Winteringham for those wanting to learn more about API testing and tools") by [Mark Winteringham](https://www.mwtestconsultancy.co.uk "MW Test Consultancy").
+
+Start your exploration using API documentation. For Restful booker, you can find that [here](https://restful-booker.herokuapp.com/apidoc/index.html "API documentation for the playground API restful-booker.").
+
+To learn more about testing APIs and using Postman, I suggest the free course [Exploring Service APIs through Test Automation](https://testautomationu.applitools.com/exploring-service-apis-through-test-automation/ "Exploring Service APIs through Test Automation") by [Amber Race](https://twitter.com/ambertests "Amber Race on Twitter").
+
+## Making Requests
+
+Inspired by the article [API Integration in Python – Part 1](https://realpython.com/api-integration-in-python/ "How to Make Friends and Influence APIs"), I started by making a Python client to abstract interactions with the Restful Booker API. The article is not focused on testing, but instead shows us how to Constructing an API Library, using Requests.
+
+This pattern of abstraction is great and we can use it along side an assertion framework to do some robust testing.
+
+You can take a closer look at my API Library for Restful Booker, and my rest code on the [Pybooker](https://github.com/dowenb/pybooker "Example of making using and testing an API in python") GitHub Repository.
+
+
+
+This basic example makes a GET request to the URL