My .bash_profile

Don’t know why I never added it here, so doing it now.


alias ll="ls -al"
alias src="cd ~/workspace/"
alias ap="cd ~/workspace/git/antonperez/"

alias readyapi="/Applications/ReadyAPI-2.5.0.app/Contents/java/app/bin/ready-api.sh"

performGitOperations() {
    git fetch --all
    git checkout $1
    git reset --hard origin/$1
    git clean -fd
}

copom() {
    echo "[---------- START  ----------]"
    if [ "$2" = "all" ]; then
        echo "-->> blwebdriver <<--"
        cd ~/workspace/git/qa/blwebdriver
        performGitOperations $1
        echo "-->> blutilities <<--"
        cd ~/workspace/git/qa/blutilities
        performGitOperations $1
    fi

    echo "-->> blpages <<--"
    cd ~/workspace/git/qa/blpages
    performGitOperations $1
    echo "-->> blcucumber <<--"
    cd ~/workspace/git/qa/blcucumber
    performGitOperations $1
    echo "[---------- DONE ----------]"
}

Gatling How-To: Installation and Execution on OS X

This is here for my own reference, but may help others.  I’m a software craftsman on a Mac, and I use Homebrew whenever possible.  So, the info here relates to that.

      1. Instala Scala via Homebrew: brew install scala
        • Optionally: Install Scala plugin in IntelliJ
      2. Download from https://gatling.io/download/
      3. Extract and place the folder in /usr/local/Cellar/gatling/gatling-charts-highcharts-bundle-2.3.1
      4. Set the directory settings in /conf/gatling.conf
      5. Create a test.scala file in /user-files/simulations
      6. Go to the terminal and run /usr/local/Cellar/gatling/gatling-charts-highcharts-bundle-2.3.1/bin/gatling.sh
      7. To run from IntelliJ via Maven:
        gatling:execute -Dgatling.simulationClass=TestSimulation -f pom.xml

Install sqlcmd on Mac OS X

In case you need to run SQL Server scripts from your Mac, do the following to install (NOTE: I use HomeBrew.):

    • From the terminal, type:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

    • You should see something like in the screenshot. Type “YES” if prompted and be on your way.
    • Once done, type:

sqlcmd

Selenium: How to assert a WebElement doesn’t exist

Just in case you need to assert that a WebElement doesn’t exist, here’s a code snippet that you can use.

Java

public int isElementPresent(String xpath) {
    return  driver.findElements(By.xpath(xpath)).size();
}

Cucumber
@Then("^I expect to see the link On the page$")
public void iExpectToSeeTheLinkOnThePage() {
    assertTrue(demoPage.isElementPresent() &gt; 1);
}

Clean Code Book Summary

This is a summary of Robert C. Martin’s Clean Code book. Once that contains a lot of gems that will make a coder efficient and with more sleep.

Disclaimer: The below is not something I wrote; it was copied from here. I’m just adding it on my blog for personal reference.  Thanks goes out to wojteklu for creating this summary!


Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability.


General rules

  1. Follow standard conventions.
  2. Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
  3. Boy scout rule. Leave the campground cleaner than you found it.
  4. Always find root cause. Always look for the root cause of a problem.

Design rules

  1. Keep configurable data at high levels.
  2. Prefer polymorphism to if/else or switch/case.
  3. Separate multi-threading code.
  4. Prevent over-configurability.
  5. Use dependency injection.
  6. Follow Law of Demeter. A class should know only its direct dependencies.

Understandability tips

  1. Be consistent. If you do something a certain way, do all similar things in the same way.
  2. Use explanatory variables.
  3. Encapsulate boundary conditions. Boundary conditions are hard to keep track of. Put the processing for them in one place.
  4. Prefer dedicated value objects to primitive type.
  5. Avoid logical dependency. Don’t write methods which works correctly depending on something else in the same class.
  6. Avoid negative conditionals.

Names rules

  1. Choose descriptive and unambiguous names.
  2. Make meaningful distinction.
  3. Use pronounceable names.
  4. Use searchable names.
  5. Replace magic numbers with named constants.
  6. Avoid encodings. Don’t append prefixes or type information.

Functions rules

  1. Small.
  2. Do one thing.
  3. Use descriptive names.
  4. Prefer fewer arguments.
  5. Have no side effects.
  6. Don’t use flag arguments. Split method into several independent methods that can be called from the client without the flag.

Comments rules

  1. Always try to explain yourself in code.
  2. Don’t be redundant.
  3. Don’t add obvious noise.
  4. Don’t use closing brace comments.
  5. Don’t comment out code. Just remove.
  6. Use as explanation of intent.
  7. Use as clarification of code.
  8. Use as warning of consequences.

Source code structure

  1. Separate concepts vertically.
  2. Related code should appear vertically dense.
  3. Declare variables close to their usage.
  4. Dependent functions should be close.
  5. Similar functions should be close.
  6. Place functions in the downward direction.
  7. Keep lines short.
  8. Don’t use horizontal alignment.
  9. Use white space to associate related things and disassociate weakly related.
  10. Don’t break indentation.

Objects and data structures

  1. Hide internal structure.
  2. Prefer data structures.
  3. Avoid hybrids structures (half object and half data).
  4. Should be small.
  5. Do one thing.
  6. Small number of instance variables.
  7. Base class should know nothing about their derivatives.
  8. Better to have many functions than to pass some code into a function to select a behavior.
  9. Prefer non-static methods to static methods.

Tests

  1. One assert per test.
  2. Readable.
  3. Fast.
  4. Independent.
  5. Repeatable.

Code smells

  1. Rigidity. The software is difficult to change. A small change causes a cascade of subsequent changes.
  2. Fragility. The software breaks in many places due to a single change.
  3. Immobility. You cannot reuse parts of the code in other projects because of involved risks and high effort.
  4. Needless Complexity.
  5. Needless Repetition.
  6. Opacity. The code is hard to understand.